NodeJS / Express GET外部应用程序的退出状态

时间:2017-02-02 05:18:09

标签: node.js express asynchronous

我是NodeJS的新手,这是我第一次使用Express 4,我试图围绕命令行应用程序构建一个简单的RESTful前端。最终只需要一个GET和一个POST,POST处理大约3或4个不同的参数。 GET应该使用所有默认参数调用命令行应用程序,这基本上只是状态检查并在完成时返回退出状态。 POST将在命令行上传递POST参数。我知道这基本上需要一个异步调用,比如child_process.execFile(),但我似乎无法弄清楚如何从回调函数中实际返回响应。

这是我用作起点的教程,省略了mongoose依赖,因为我不需要MongoDB,所以我基本上只是按照你的方式启动服务器。在这一点上,我很丢失。我总是讨厌编写异步代码......

var express    = require('express');        // call express
var app        = express();                 // define our app using express
var bodyParser     = require('body-parser');
var child_process  = require('child_process');

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var port = process.env.PORT || 8080;        // set our port

var router = express.Router();              // get an instance of the express Router

router.get('/', function(req, res) {
    res.json({ message: 'hooray! welcome to our api!' });
});

router.get('/myapp/status', function(req, res) {
    console.log(req.user);
    child_process.execFile(
            'casperjs',
            ['myfile.js', '--cmd="Status"', '--user="myuser"', '--pass="#mypass"'],
            null,
            function(response) {
                // ???
            }, res);
});

app.use('/api', router);

app.listen(port);
console.log('Magic happens on port ' + port);

1 个答案:

答案 0 :(得分:0)

您可以尝试以下操作:

router.get('/myapp/status', function(req, res) {
   console.log(req.user);
   child_process.execFile(
        'casperjs',  //command
        ["myfile.js --cmd=Status --user=myuser --pass=#mypass"],  // args
        function(err, stdout, stderr) { //callback
            if (err) {
               return res.status(500).send(err);
            }
            res.send(stdout);  // to send response to client
        });
});