我是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);
答案 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
});
});