返回一个mongoose模型函数的结果

我正在使用node.js和mongoose编写一个Restful API。 我需要返回一个search结果的对象。 这是我的代码:

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

我需要这个结果被返回。 我该如何解决这个问题?

这是互联网历史上最重要的问题之一!

由于节点是asynchronous的,所以你需要重写函数来返回一个callback或者使用Promise之类的东西。

这里是callback:

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

然后像这样调用它:

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

或者你可以使用承诺,这里是使用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)}); 

基于承诺的版本似乎更复杂:)。