使用mongodb数据库在节点中使用get请求处理数据

时间:2015-09-07 14:47:00

标签: javascript node.js mongodb mongoose

Noob问题..如何将mongoose查询与JSON响应同步?以下代码返回空值,因为查询稍后结束。处理它的方法是什么?

router.route('/admin')
    .get(function (req, res ) {
        var country = [];
        var element = [];
        Country.find({}, function (err, data) {
            country = data; 
        });
        Items.find({}, function (err, data) {    
            element = data;         
        }); 
        res.json({
            countries: country,
            elements: element
        });         
    }); 

1 个答案:

答案 0 :(得分:2)

country.find和Items.find是异步执行的 - 并且同时运行。 您需要将它们嵌套在回调函数中以遵循异步执行模式 - 这样您就可以确保它们是同步执行的。所以你的代码需要看起来像这样:

Country.find({}, function (err, data) {
        country = data; 
        Items.find({}, function (err, data) {    
            element = data;        
            res.json({
              countries: country,
              elements: element
            });   
        }); 
    });

更高级且可能更好的方法是使用promise库 - 这意味着它们仍然是异步执行的,但只有在所有函数的所有结果都可用时才会返回完整的结果 - 这将在下面解释:

Executing several mongoose queries: how to use promises instead?