Mongodb以异步方式获得结果

时间:2015-07-30 09:23:36

标签: javascript node.js mongodb asynchronous express

这是我的行动,它将从用户集合中获取所有用户

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

当我记录用户对象时,它返回空数组但是当我在函数内部记录每个文档时它才能成功运行

问题是如何才能获得结果异步?

2 个答案:

答案 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这样的库来放置一个回调,当每个循环完成迭代所有文档时,可以返回结果数组。

Async 'each' function