我正在尝试创建一个简单的Web应用程序,它会触发http.request调用,获取数据并将其显示到html(此处为ejs)。我能够发出请求,获取数据,按摩它等但无法将其传递给视图。示例代码如下:
var searchData = [];
router.post('/',requesthandler);
function requesthandler(req,res){
var options = {
host: url,
port: 9999,
path: qstring,
method: 'GET'
};
var reqget = http.request(options,responsehandler);
reqget.end();
console.log('Rendering now:............................ ');
res.render('result',{title: 'Results Returned',searchdata : searchData});
}
function responsehandler(ress) {
console.log('STATUS: ' + ress.statusCode);
ress.on('data', function (chunk) {
output += chunk;
console.log('BODY: ' );
});
/* reqget.write(output); */
ress.on('end',parseresponse);
}
function parseresponse(){
var data = JSON.parse(output);
console.log(data.responseHeader);
// populate searchData here from data object
searchData.push({//some data});
}
function errorhandler(e) {
console.error(e);
}
module.exports = router;
问题是我无法通过res.render()将objeect searchData传递给视图; '现在渲染:...........'在parseresponse()执行开始之前执行,因此显示的页面没有使用回调似乎与之相关的数据,那么我怎么能通过在parseresponse()中加载searchData后,数据对象将显示在视图中。 PS:我能够打印所有控制台语句
答案 0 :(得分:1)
全局定义res变量:
var res;
function requesthandler(req,resObj){
res = resObj;//set it to the resObj
}
将res.render包装在像这样的函数中:
function renderPage(){
res.render('result',{title: 'Results Returned',searchdata : searchData});
}
然后在parseresponse函数中执行以下操作:
function parseresponse(){
var data = JSON.parse(output);
searchData.push({some data});
renderPage();
}
希望这能解决你的问题。