Node.js替代PHP的exec
我想写一个C
软件(如素数分解),并将其放置在我的Web服务器上(基于Node.js
)。 然后我想要一个HTML
表单和一个button的HTML
。
当button被点击时, C
应该被执行(在服务器上),其中一个文本字段被作为inputparameter passing。 C
的输出应该再次传递给HTML
文本字段。
在PHP
这样的事情是可能的:
<?php exec('~/tools/myprog.o'); ?>
我怎么会在Node.js
这样做( Express.js
也很好)。 特别是input/输出redirect?
我觉得你的问题是两部分。
- PHP的exec相当于node.js
- 执行C程序并使用node.js提供输出。
坚持纯粹的node.js,你将能够执行和获得标准输出和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); });
上面的代码绝对不是线程安全的,如果发出并发请求,它会中断,理想情况下,你不会为每个请求编译它,你会编译和caching首次请求(你可以匹配源时间戳和编译输出,如果编译输出不存在或者其时间戳较less – 那么源代码就需要编译它),然后在随后的请求中使用caching输出。
在expression你可以做下面的事情
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}); }); });
你可以玩上面的代码片段,并得到你在找什么。
希望这可以帮助。 请让我知道,如果你需要别的东西。