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?

我觉得你的问题是两部分。

  1. PHP的exec相当于node.js
  2. 执行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}); }); }); 

你可以玩上面的代码片段,并得到你在找什么。

希望这可以帮助。 请让我知道,如果你需要别的东西。