【发布时间】:2014-07-23 02:28:07
【问题描述】:
我是 node.js 的新手,我将它用作服务器来接收来自浏览器的 http.get 请求,进行一些处理并将结果返回给浏览器。
该处理实际上是使用 phantom.js/casper.js 抓取网站,并且由于在 node.js 中使用 casper.js 的复杂性,我使用 shell 脚本将其作为子进程执行。
当我运行下面的代码并从浏览器发出请求时,响应似乎出现在 shell 脚本运行之前。我尝试使用异步库连续运行这些步骤,以便 run.sh 在添加到响应之前运行并返回一个值,但它似乎不像那样工作。谁能发现我的愚蠢错误?
提前致谢!
var express = require('express');
var app = express();
var sys = require('sys');
var exec = require('child_process').exec;
var async = require('async');
var auth = express.basicAuth('test', 'pass');
var server = app.listen(3000, function() {
console.log('Listening on port %d', server.address().port);
});
var result;
//app.use(auth);
app.get('/free/:u/:p', auth, function(req, res) {
async.series([
function(callback){
var puts = function (error, stdout, stderr) {
result = stdout;
}
exec("./run.sh " + req.params.u + " " + req.params.p, puts);
callback(null);
},
function(callback){
res.writeHead(200,{'Content-Type':'application/json'});
res.send(result)
callback(null);
}
]);
});
app.get('/', function(req, res) {
res.send('Hello!');
});
【问题讨论】:
标签: javascript node.js shell