返回mongoose模型函数的结果

时间:2015-04-17 16:03:49

标签: javascript node.js mongoose

我正在使用node.js和mongoose开发Restful API。我需要返回一个带有搜索结果的对象。这是我的代码:

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.log来观察结果丢失的位置。这是日志:

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

我需要返回结果。我怎么解决这个问题?

1 个答案:

答案 0 :(得分:2)

这是互联网历史上最常见的问题之一!

由于节点是异步的,因此您需要重写函数以返回回调或使用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)});

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