javascript - Node.js 替代 PHP 的 exec

标签 javascript php html node.js express

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

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

PHP 中,这样的事情是可能的:

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

我将如何在 Node.js 中处理类似的事情(Express.js 也可以)。特别是输入/输出重定向?

最佳答案

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

  1. Node.js 的 PHP exec 等效项
  2. 执行 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/

相关文章:

php - 关于静态页面的 CodeIgniter 教程

php - 表单数据被插入到 MySQL 表中,但服务器仍然抛出错误

html - 有没有办法让 html 列表表现得像这样

javascript - 使用 JavaScript 处理刷新页面事件

javascript - 循环遍历javascript集合,输出自定义文本

Javascript 声音开始/停止和图像更改第 2 部分

javascript - 将带有 rowspan 和 colspan 的 html 表导出到 csv 或 xls

php - 开/关按钮滑动 proto.io 不适用于 Ajax PHP 和 MySQL

javascript - 在 <div> 内或在 url 上添加 "?param="时加载页面

javascript - 单击后不再触发 Keydown 事件