所以我编写了下面的代码但是无法让内部函数.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语句总是在迭代完所有集合查询结果后运行。
答案 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的帮助。