【发布时间】:2017-09-07 08:20:04
【问题描述】:
根据我的阅读,有几种方法可以在 node.js 应用程序中运行 java 文件。一种方法是生成一个子进程:(java 代码与依赖项一起打包在一个可执行文件jar 中。)
var exec = require('child_process').exec, child;
child = exec('java -jar file.jar arg1 arg2',
function (error, stdout, stderr){
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
if(error !== null){
console.log('exec error: ' + error);
}
});
另一种方法是使用java - npm 模块(link),它是JNI 的包装器(这将让我创建objects,设置和获取attributes,运行methods)。
在生产环境中,当我希望我的node.js (Express) 服务器调用java 程序(它只是将图像保存到本地目录)时,请告诉我哪种方法更好来实现这一点(就最佳实践而言)。此外,我需要将一长串arguments 传递给main 类,并且在命令行上执行此操作有点困难。我应该改为从输入文件中读取java 程序吗?
【问题讨论】:
-
如果您的输入足够复杂,我建议创建代表您的输入数据的 POJO,并使用 Jackson YAML 工厂将您的输入反序列化为 JSON 或 YAML 文件(YAML 也会解析 JSON)。然后使用 Args4J 并接受 JSON 作为文件选项,并有一个输入选项,例如 -i,它告诉您从标准输入读取输入,以便可以从另一个程序输入 JSON。这让他们有一个模板,他们可以使用该模板进行简单的令牌替换,然后通过管道传输到您的程序。或者你可以从节点做同样的事情。
-
进一步考虑,通过 stdout/stdin 将数据发送到 java 程序似乎是最有意义的。创建一个临时文件然后从 java 程序加载只是没有必要,并且会引入 IO 瓶颈