我正在使用Node express和mongodb。我试图能够遍历显示页面的所有相关属性。我的代码是
Desktop.find({}, function(err, allDesktop) {
if(err){
console.log(err);
} else {
console.log(allDesktop); // #1
res.locals.desktops = allDesktop; // Set the data in locals
}
});
console.log("res.locals.desktops: ", res.locals.desktops); //#2
该代码是路由的一部分,#1
console.log
注销所有正确的结果。但是console.log
#2返回undefined
。为什么是这样?我知道我在完全相同的路线的其他地点都设置了相似的名称,但是改为res.locals.laptops
我在这里想念什么?
最佳答案
这与Event Loop有关。简而言之,Desktop.find()
将执行,但是您不知道何时完成。
那就是您的回调起作用的地方:function(err, allDesktop) {}
。当Desktop.find()
完成执行时,将调用回调。
因此,代码从上到下进行评估,结果res.locals.desktops
为undefined
。这样的事情应该可以解决您的问题:
Desktop.find({}).exec()
.then(allDesktop => {
res.locals.desktops = allDesktop
return Promise.resolve()
})
.then(() => {
console.log(res.locals.desktops)
})
.catch(err => console.error(err))
.exec()
返回一个MongooseThenable
,它实际上是一个Promise
。
关于node.js - TypeError : Cannot read property 'ref' of undefined | Express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46797329/