这是我的行动,它将从用户集合中获取所有用户
app.post('/login', function(req,res,next){
users = self._db.get('users', {})
})
这是我在数据库类中的功能
this.get = function( col, opt )
{
var result = [],
opt = opt || {};
query = db.collection(col).find( opt );
query.each( function(err, doc)
{
console.log( doc );
if( doc != null )
{
result.push( doc );
}
});
return result;
};
当我记录用户对象时,它返回空数组但是当我在函数内部记录每个文档时它才能成功运行
问题是如何才能获得结果异步?
答案 0 :(得分:1)
您错过了回调功能。由于Node.js在设计上是异步的,因此所有I / O操作都需要回调。
回到您的示例,我建议您使用monk并执行以下操作:
var db = require('monk')('localhost/mydb');
var users = db.get('users');
app.post('/login', function(req, res) {
users.find({}, function(err, data) {
// remember to handle error here, for example;
// if (err) return res.send('error');
res.json(data);
});
});
基本上,您缺少的回调是users.find
函数的第二个参数。
答案 1 :(得分:0)
使用像async这样的库来放置一个回调,当每个循环完成迭代所有文档时,可以返回结果数组。