TypeError:无法读取属性' ref'未定义的|表达

时间:2017-10-17 18:57:01

标签: node.js mongodb express mongoose syntax-error

我正在使用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

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

这与Event Loop有关。简而言之,Desktop.find()会执行,但您何时会完成。

这就是你的回调发挥作用的地方:function(err, allDesktop) {}。当Desktop.find()完成执行时调用回调。

因此代码从上到下进行评估,结果res.locals.desktopsundefined。这样的事情可以解决你的问题:

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