nodejs变量不传递给内部函数

时间:2015-12-14 01:27:39

标签: javascript node.js mongodb

所以我编写了下面的代码但是无法让内部函数.each能够使用MongoDB查询的结果调用res.write

我最初认为问题可能是因为变量res不是全局变量,但即使在将其作为全局变量尝试之后它仍然不起作用,它是全局的还是不是全局的影响代码,因为.each函数位于传递 res 字符串的showSidebarData函数内。

function showSidebarData(res){
  res.writeHead(200, {'Content-Type': 'text/html'});
  coll.find({}, function(err, cursor) {
    item = new Array();
    cursor.each(function(err, doc) {
      if(doc!==null){
        item.push(doc);
      }else{
        var data = {
          "item": item
        };
        fs.readFile('/usr/share/node/pathtofile.html', 'utf8', function(err, html){
          if (err) {
            console.log(err);
          }
          res.write(dispatcher.templateEngine(html, data));
        });
      }
    });
  });
}

我的目标是能够将读取的文件中的模板引擎函数的结果写入res内的数据流。作为旁注,if(doc!==null)的else语句总是在迭代完所有集合查询结果后运行。

1 个答案:

答案 0 :(得分:0)

正在调用showSidebar()的函数正在使用正确的范围,但是由于性质或javascript,在文件流完成读取文件并想要写入res之前,respose正在关闭。解决方案是在下面的代码中注释掉res.end()

dispatcher.onGet("/admin/leftSidebar", function(req, res) {
        if(req.params.cookies.session=="session-key"){
showSidebarData(res);

}else{
 res.write("sorry but your username and/or password was invalid please go try brute forcing someone elses site");   
}
// commenting out the line below makes this code work 
    res.end();
});

我要感谢@johnnyHK的帮助。