【问题标题】:How to call node.js server javascript from html page如何从 html 页面调用 node.js 服务器 javascript
【发布时间】:2019-01-28 02:58:37
【问题描述】:

情况

我有一个调用多个 javascript 文件的 html 页面。现在一切都在客户端运行。

因为我需要在 javascript 中执行一个 jar,所以我正在切换到 Node.js。 (不推荐使用小程序)

但是,我是 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?

【问题讨论】:

    标签: javascript html node.js web


    【解决方案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);
    

    【讨论】:

    【解决方案2】:

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

    你不能。至少不明智。

    更改它,使其导出一个您可以调用的函数,如果您想多次调用它。

    由于它是异步的,您应该让该函数返回一个Promise

    在您的网络服务器中,require 您编写的module 可以访问它导出的函数。

    编写一个route,它调用该函数并返回一个合适的 HTTP 响应。

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

    【讨论】:

      【解决方案3】:

      您的网络服务器现在已经(几乎)尽可能简单了。只需在使用 http (get) 调用 ip+port 8080 时发送 index.html。 在您可以使用您的 jar 模块之前,您必须在您的网络服务器中创建一个要求:

      var child = require('javaApp')
      

      这将使您能够访问具有错误功能的“子”包装。 “孩子”实际在做什么和可以做什么,你可能知道(我希望)。如果您跳过 index.html,您可以发送一些来自您的“孩子”的响应,看看它是如何工作的。

      【讨论】:

        猜你喜欢
        • 2021-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-10
        相关资源
        最近更新 更多