我有一个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);
javaApp.js ,它执行一个jar
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?
这个答案有用吗? How to call node.js server side method from javascript?
答案 0 :(得分:1)
如果其中没有函数名,如何从index.html调用javaApp.js?
不能。至少不明智。
对其进行更改,以使其导出一个可以多次调用的函数。
由于它是异步的,因此应使该函数返回Promise。
在您的网络服务器中,require是您编写的module,以访问其导出的功能。
编写一个route来调用该函数并返回合适的HTTP响应。
答案 1 :(得分:1)
您的网络服务器现在已经非常简单了(几乎)。当使用http(获取)调用ip + port 8080时,仅发送index.html。 在使用jar模块之前,必须在Web服务器中进行以下要求:
var child = require('javaApp')
这将使您可以访问带有错误功能的“子”包装。您可能知道(我希望)实际的“孩子”在做什么和可以做什么。如果您跳过index.html,则可以从“子级”发送一些响应,以了解其工作原理。
答案 2 :(得分:1)
如果要在服务器上调用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
处获取获取请求,并有选择地等待服务器的任何响应。
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);