Return 猫鼬模型函数的结果

Return the result of a mongoose model function

我正在使用 node.js 和猫鼬开发 Restful API。我需要 return 一个包含搜索结果的对象。这是我的代码:

var Get = function (criteria) {      
    var result;
    Users.findOne(criteria, function(err, res){
        console.log('Error: ' + err);
        console.log('Results: ' + res);
        result = err || !res ? err || errors['404']: res;
        console.log(result);
    });
    console.log('Final results: ' + JSON.stringify(result));
    return result;
};

因为我遇到了问题,所以我添加了那些 console.logs 来观察结果丢失的地方。这是日志:

Final results: undefined Error: null Results: { //user... }

我需要 returned 那个结果。我该如何解决这个问题?

这是互联网历史上被问得最多的问题之一!

由于节点是异步的,因此您需要将函数重写为 return 回调或使用类似 promises 的东西。

这是回调:

var Get = function (criteria, cb) {      
    return Users.findOne(criteria,cb);  
};

然后这样称呼它:

Get({}, function(err, res){
  console.log(res);
});

或者你可以使用promises,这里是使用Q库

var Get = function (criteria) {   

var deferred = Q.defer();
 Users.findOne(criteria,function(err, o){
       if (err) deferred.reject(err);
            deferred.resolve(o);
 });
 return deferred.promise;
}

然后这样称呼它:

Get({}).then(function(res){console.log(res)});

基于 promise 的版本对我来说似乎更复杂 :)。