我正在使用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... }
我需要返回结果。我怎么解决这个问题?
答案 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)});
基于承诺的版本对我来说似乎更复杂:)。