无法发送数据以响应nodejs中的视图

时间:2014-11-18 08:37:06

标签: json node.js callback httprequest

我正在尝试创建一个简单的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:我能够打印所有控制台语句

1 个答案:

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

希望这能解决你的问题。