我想编写一个 C
软件(例如素数分解)并将其放置在我的网络服务器上(基于 Node.js
)。
然后我想要一个带有表单和按钮的 HTML
文档。
单击按钮时,应执行(在服务器上)C
程序,并将表单的文本字段作为输入参数传递。这
C
程序的输出应再次传递到 HTML
文本字段。
在 PHP
中,这样的事情是可能的:
<?php
exec('~/tools/myprog.o');
?>
我将如何在 Node.js
中处理类似的事情(Express.js
也可以)。特别是输入/输出重定向?
最佳答案
我觉得你的问题分为两部分。
- Node.js 的 PHP exec 等效项
- 执行 C 程序并使用 Node.js 提供其输出。
坚持使用纯 Node.js,您将能够使用以下代码执行并访问 stdout 和 stderr。
var exec = require('child_process').exec;
exec("ls -l", function(error, stdout, stderr) {
console.log(error || stdout || stderr);
});
对于#2, 我不确定你是否可以直接执行“c”程序,所以我想你需要做这样的事情
var exec = require('child_process').exec;
exec("gcc ~/tools/myprog.c -o prime && ./prime", function(error, stdout, stderr) {
console.log(error || stdout || stderr);
});
上面的代码绝对不是线程安全的,如果发出并发请求,它就会中断,理想情况下,您不会为每个请求都编译它,而是会为第一个请求进行编译和缓存(您可以匹配源的时间戳和编译的输出,如果编译的输出不存在或其时间戳较小 - 早于源代码,那么您需要编译它),然后在后续请求中使用缓存的输出。
在 express 中,您可以执行如下操作
var exec = require('child_process').exec;
router.get('/prime/:num',function(req, res, next){
exec("gcc ~/tools/myprog.c -o prime && ./prime " + req.params.num, function(error, stdout, stderr) {
if(error){
res.status(400).json({'message': error.message});
return;
}
if(stderr){
res.status(400).json({'message': stderr});
return;
}
res.status(200).json({'result': stdout});
});
});
您可以使用上面的代码片段并获得您想要的内容。
希望这有帮助。如果您还需要任何其他信息,请告诉我。
关于javascript - Node.js 替代 PHP 的 exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35614584/