我有一个表单数据发送字符串和整数到我的 Express 服务器,我需要使用我的 Java 后端进行计算并响应前端,我可以直接从 Express 服务器执行此操作还是需要涉及其他步骤?
您可以从nodejs执行java命令。您可以通过expressjs路由器运行exec命令。对于最好的情况,我将使用 Java 创建另一个 API 并向该端点(微服务)发出请求。但如果您不想这样做,您可以尝试此代码示例;
const express = require('express')
const app = express()
const port = 3000
const exec = require('child_process').exec
app.get('/', (req, res) => {
const child = exec('/usr/bin/java ~/example.jar', => (error, stdout, stderr) {
if (err) {
console.error(err);
res.json({error: err, status: 500, errorOutput: stderr})
return
}
// it is important to have json structure in your output or you need to create a logic which parse the output
res.json(stdout)
})
})
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
您可以使用 Node.js 'exec' 来调用外部 Java 程序,如下所示:
Javascript程序
const exec = require('child_process').exec;
// Number 7 is a command line argument to pass to the Java program
exec('java MyJavaApplication 7', function callback(error, stdout, stderr){
console.log(stdout);
});
Java程序
public class MyJavaApplication {
public static void main(String[] args) {
int input = Integer.parseInt(args[0]);
int output = calculate(input);
System.out.println(Integer.toString(output));
}
private static int calculate(int input) {
// Do some complex calculation
return input * input;
}
}
在 Node.js 上,您可以捕获 Java 程序写入标准输出的任何内容。 根据输入的复杂程度,您可能希望将文件名作为参数传递给 Java 程序。例如,该文件可以包含 JSON 格式的输入内容。
您可以使用名为“bridgeService”的库。这将 java 方法公开为 REST 对象。您可以将其部署在本地或服务器上。
对于像“a.b.c.d.E.f(String argument)”这样的方法
有效负载将类似于:
{
"callContent": {
"<ID>": {
"class": "a.b.c.d.E",
"method": "f",
"args": [
"argument"
]
}
}
}
有关bridgeService的更多信息可以参考https://github.com/adobe/bridgeService