Mongodbasynchronous获取结果
这是我的行动,将从用户收集所有用户
app.post('/login', function(req,res,next){ users = self._db.get('users', {}) })
这是我在数据库类中的function
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; };
当我login用户对象它返回空数组,但是当我logging每个文件内function它成功的工作
问题是我怎样才能得到asynchronous的结果?
你错过了callback函数。 由于Node.js在devise上是asynchronous的,所有的I / O操作都需要callback。
回到你的例子,我build议你使用和尚 ,做这样的事情:
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); }); });
基本上,你所缺less的callback是users.find
函数的第二个参数。
使用像async这样的库来进行callback,当每个循环完成迭代所有文档时,可以返回结果数组。
asynchronous“每个”function