Node.js替代PHP的exec

时间:2016-02-24 22:33:57

标签: javascript php html node.js express

我想写一段C软件(如素数因子分解)并将其放在我的网络服务器上(基于Node.js)。 然后我想要一个HTML - 带有表单和按钮的文档。

单击该按钮时,{(1}} - 程序应该(在服务器上)执行,并将表单的文本字段作为输入参数传递。该 C - 程序的输出应再次传递给C - 文本字段。

HTML这样的事情是可能的:

PHP

我如何在<?php exec('~/tools/myprog.o'); ?> 中进行类似的操作(Node.js也很好)。特别是输入/输出重定向?

1 个答案:

答案 0 :(得分:2)

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

  1. PHP的exec等效于node.js
  2. 执行C程序并使用node.js提供其输出。
  3. 坚持使用纯node.js,您可以使用以下代码执行并访问stdout和stderr。

    var exec = require('child_process').exec;
    
    exec("ls -l", function(error, stdout, stderr) {
      console.log(error || stdout || stderr);
    });
    

    对于#2,     我不确定你是否可以直接执行&#34; c&#34;程序,所以我想你需要做这样的事情

     var exec = require('child_process').exec;
    
    exec("gcc ~/tools/myprog.c -o prime && ./prime", function(error, stdout, stderr) {
      console.log(error || stdout || stderr);
    });
    

    上面的代码绝对不是线程安全的,如果发出并发请求,它就会中断,理想情况下你不会为每个请求编译它,你为第一个请求编译和缓存(你可以匹配时间)源代码和已编译输出的标记,如果编译输出不存在或其时间戳较少 - 比源代码早,则需要编译它)然后在后续请求中使用缓存输出。

    在快递中你可以做类似下面的事情

    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});
       });
    });
    

    您可以使用上面的代码段来获取您想要的内容。

    希望这会有所帮助。如果您还有其他需要,请告诉我。