Javascript Node.js替代PHP';首席执行官

Javascript Node.js替代PHP';首席执行官,javascript,php,html,node.js,express,Javascript,Php,Html,Node.js,Express,我想写一个C软件(比如素数分解)并把它放在我的web服务器上(基于Node.js)。 然后我想要一个带有表单和按钮的HTML-文档 当点击按钮时,应执行C-程序(在服务器上),并将表单的文本字段作为输入参数传递。这个 C-程序的输出应再次传递到HTML-文本字段 在PHP中,类似的事情是可能的: <?php exec('~/tools/myprog.o'); ?> 我如何在Node.js中进行类似的操作(Express.js也可以)。尤其是输入/输出重定向?我觉得你的问题分为两

我想写一个
C
软件(比如素数分解)并把它放在我的web服务器上(基于
Node.js
)。 然后我想要一个带有表单和按钮的
HTML
-文档

当点击按钮时,应执行
C
-程序(在服务器上),并将表单的文本字段作为输入参数传递。这个
C
-程序的输出应再次传递到
HTML
-文本字段

PHP
中,类似的事情是可能的:

<?php
exec('~/tools/myprog.o');
?>


我如何在
Node.js
中进行类似的操作(
Express.js
也可以)。尤其是输入/输出重定向?

我觉得你的问题分为两部分

  • PHP对node.js的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});
       });
    });
    
    您可以使用上面的代码片段,并获得所需的内容


    希望这能有所帮助。如果您还需要什么,请告诉我。

    使用为什么不在应用程序的.js条目文件中编译C程序。这样,如果编译出错,您就可以阻止应用程序启动?您甚至可以使用
    app.set('C-program-verson','here')缓存程序元
    供以后验证。无论如何,在应用程序生命周期中编译程序可能不是一个好主意。这绝对应该在部署过程中完成(或者在传输JS时在构建过程中完成)进程。如果使用npm脚本,您可以利用
    npm postinstall
    npm prestart
    。@Seth我同意您的看法,有一点值得商榷的是,他试图直接执行c程序,所以我刚才提到,您将无法直接执行c程序,您需要编译它。因此,在我的回答中,我刚刚展示了一种编译f的方法在node.js中,您可以在gulp/grunt任务中实现它,以便将构建代码编译到一个文件夹中,并在请求中直接执行。我的代码片段“只是提供一个想法”,为了获得所需的输出需要做些什么。非常感谢。我实际上指的是一个已经编译的
    C
    程序(可执行)我的问题有一个输入错误。这似乎是一个可靠的答案。接受!