繁体   English   中英

如何从HTML页面调用Node.js服务器JavaScript

[英]How to call node.js server javascript from html page

情况

我有一个HTML网页,可以调用多个javascript文件。 现在一切都在客户端上运行。

因为我需要在javascript中执行jar,所以我切换到Node.js。 (不赞成使用applet)

但是,我是node.js的新手,对如何链接所有内容感到困惑。


我有 :

index.html ,它调用各种.js脚本(files.js,objects.js等)

webServer.js构成node.js服务器

var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
    fs.readFile('index.html', function(err, data) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(data);
    res.end();
    });

}).listen(8080);

执行jar的javaApp.js

var exec = require('child_process').exec;
var child = exec('java -jar E:/JavaApp.jar',
function (error, stdout, stderr){
    console.log('Output -> ' + stdout);
    if(error !== null){
        console.log("Error -> "+error);
    }
});
module.exports = child;

问题

我想在html中单击一个按钮时,在服务器端调用javaApp.js。

我知道Express可以用于将index.html链接到webServer.js,但是我不明白如何将index.html链接到服务器使用的代码。

如果没有函数名,如何从index.html调用javaApp.js?

这个答案有用吗? 如何从javascript调用node.js服务器端方法?

如果其中没有函数名,如何从index.html调用javaApp.js?

你不能 至少不明智。

对其进行更改,以便导出一个可以多次调用的函数。

由于它是异步的,因此应使该函数返回Promise

在您的Web服务器中, 要求您编写的模块可以访问其导出的功能。

编写一个调用该函数并返回合适的HTTP响应的路由

然后,通过单击链接 ,提交表单 ,使用fetch或您喜欢的任何其他方法,使浏览器向该路由发出HTTP请求。

现在,您的网络服务器变得非常简单(几乎)。 当使用http(获取)调用ip + port 8080时,仅发送index.html。 在使用jar模块之前,必须在Web服务器中进行以下要求:

var child = require('javaApp')

这将使您可以访问带有错误功能的“子”包装。 您可能知道(我希望)实际的“孩子”在做什么和可以做什么。 如果您跳过index.html,则可以从“子级”发送一些响应,以了解其工作原理。

如果要在服务器上调用jar,则必须为其创建路由(可能使用express)。

router.get('/call-java-app', function (req, res, next){
//call you function in here
//respond with any data you want
res.send('Your data here');
});

您的按钮必须在/call-java-app处发出一个get请求,并有选择地等待服务器的任何响应。

var url = '/call-java-app';
console.log(url);
var xmlHttp = new XMLHttpRequest();

xmlHttp.onreadystatechange = function () {
    if (xmlHttp.readyState === 4) {
        //handle server response here if you want to
    }
}
xmlHttp.open("GET", url, true); // false for synchronous request
xmlHttp.send(null);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM