是否有一种从Java程序中使用Node.js包的好方法?

时间:2017-12-31 08:20:21

标签: javascript java node.js npm

我正在扩展一个用Java编写的服务器,我在npm上发现了一个非常好的Node.js包,它提供了一个我想从Java服务器调用的API。

如何实现它们之间的“桥梁”?

2 个答案:

答案 0 :(得分:0)

你必须将node.js包裹在node.js程序中,并从该程序中获取可以调用模块中的函数的API,可能通过Web服务器访问它(但是任何进程间通信机制都可以工作)。然后,您必须先运行node.js程序,然后您的Java应用程序才能通过node.js服务器访问node.js功能。

它需要一个node.js解释器来运行node.js Javascript,你只能通过运行一个单独的node.js进程来获得其中一个。因此,您无法在同一进程中直接构建从Java到Javascript的桥梁。您必须创建一个Javascript流程,然后与该单独流程进行通信。

答案 1 :(得分:0)

我能想到的2个选项。

  1. 使用服务器包装模块并侦听请求。然后将结果返回给java进程。
  2. 执行子进程。 stdout / stderr将返回到java进程。
  3. 就个人而言,我更喜欢选项#2。如上所述,这将需要安装v8 javascript引擎。

    示例:

    $(".modal").on("hidden.bs.modal", function(){
        $('.modal-content a').removeData('category', 'subcategory');
    });
    

    从java代码

    运行程序
    //process.js
    console.log('process running');
    console.log(process.argv);
    console.error(new Error('process error'));
    process.exit(0);
    

    标准输出应该是:

    ProcessBuilder pb = new ProcessBuilder("node", "process", "one", "three", "five")
    Process p = pb.start();
    //Get output from p
    

    stderr应该返回:

    process running
    [ 'node.exe',
      'process',
      'one',
      'tew',
      'three']