mongoose findOne函数返回undefine

时间:2016-09-14 00:31:17

标签: node.js mongodb

我知道我们在这里有很多这样的问题,但是没有一个答案似乎适用于我的代码,请看一下:

establishment = mongoose.model('Establishment' , new Schema({
    //_id : Schema.Types.ObjectId,
    name : String,
    cnpj : String,
    description : String,
    address : String,
    products : [],
    isActive : {type: Boolean, default: true}
}));




app.get('/home',(req, res)=>{
    var a = establishment.findOne({_id : "57d83a867d3ba20fcb657dc7" } , (err, estab)=>{
        if(err){
            return err;
        }
        console.log("inside the function: "+estab.name);
        return estab
    });
    console.log("outside the function: "+a.name)
})

当在findOne()函数中给出任何输出时,它都可以正常工作,但是当我返回它时,只是说它是"未定义"

1 个答案:

答案 0 :(得分:1)

由于节点js的非阻塞,异步性质,它正在发生。 这意味着需要花费很长时间才能完成的任何活动,例如文件访问,网络通信和数据库操作,并放在一边,直到结果准备好并通过回调函数返回。

这就是为什么你得到了未定义的原因,因为当db操作正在讨价还价时,由于非阻塞性质,外部控制台会被执行。

要获得结果,您可以执行此操作

app.get('/home',(req, res)=>{
    establishment.findOne({_id : "57d83a867d3ba20fcb657dc7" } , (err, estab)=>{
        if(err){
            return res.send(err);
        }
        console.log("inside the function: "+estab.name);
        // what ever proccing you need to do with result do here and finally return res
        res.json(estab)
    });
})