如何将回调返回值分配给Mongoose中的变量?

时间:2015-11-26 21:48:13

标签: javascript node.js mongodb mongoose

我使用mongoose.find()功能检查用户的凭据。

findUser函数将从.find()errordata参数中接收。

我想存储一个变量,.find()方法找到了与查询匹配的内容。

相反,我的console.log(logged)显示了很多关于MongoDB操作的查询信息。

var logged = UserModel.find(
          { username: username, password: password}, findUser );

console.log(logged);

var findUser = function (err, data) {
    (data.length) ? return true : return false;
};

我如何mongoose.find()方法返回真或假

1 个答案:

答案 0 :(得分:2)

请记住,nodejs是异步非io阻塞,因此任何数据库操作都将运行异步,并且可能不会根据需要分配您的变量。

我喜欢在我的流量控制中使用promises,在我的情况下,我使用bluebird这是一个非常酷的promise库,你可以做这样的事情(假设在这里表达):

 var BPromise = require('bluebird'),
 mongoose = BPromise.promisifyAll(require('mongoose'));
// etc etc load your model here
//---------------------------------
    var thiz = this;
    thiz.logged = false;
    var myPromises = [];

    myPromises.push(
        UserModel.find({ username: username, password: password}).execAsync().then(function(data){
            thiz.logged = (data.length>0);
        })
    );

//等待所有承诺完成,以防你有多个

BPromise.all(myPromises).then(function(){
 // do whatever you need...
});