2015-11-26 231 views
1

我使用mongoose.find()函数来检查用户的凭据。如何将回调返回值分配给Mongoose中的变量?

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; 
}; 

我怎样才能返回一个true或falsemongoose.find()方法?

回答

2

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

我喜欢我用bluebird这是一个非常酷的承诺库使用承诺在我的流量控制,在我的情况,你可以做这样的事情(这里假设快递):

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... 
}); 
相关问题