节点js中间件用于对mongo的异步请求

时间:2013-11-25 15:34:56

标签: javascript node.js mongodb express

现在我正在研究我的nodejs应用程序。但我有一些问题。

所以我需要添加头像字段来发布对象。

看起来像这样。

在mongodb中有2个模型用户和帖子。发布有一对多关系的userId字段。并且用户有头像是我在屏幕上存储图像标签的字符串。

但是我希望显示所有用户头像的帖子,这是我的家庭方法来自controllers / articles.js

exports.home = function () {
       Article.list( function (err,articles) {
            _.each(articles, function (item){
               User.find({is:item.id}, function(err, user)
               {
                   item.avatar = user.avatar
               })
        })
    })   
 }

但它不起作用。我明白这是异步问题。但我不知道如何解决它。我不想改变我的mongodb结构。我不希望在每个请求期间获得所有帖子和所有用户。所以也许你帮帮我吧。桅杆是中间件的东西 - 但我已经尝试过它并没有帮助。

1 个答案:

答案 0 :(得分:2)

underscore.each()不适用于此。您需要使用async.each()之类的东西来确保在返回结果返回响应之前获取所有头像。这样的事情(你可能需要做一些错误处理):

var async = require('async');
exports.home = function (res) {
   Article.list( function (err,articles) {
        async.each(articles, function (item, callback){
           User.find({is:item.id}, function(err, user) {
               if (user) {
                   item.avatar = user.avatar;
               }
               callback(null); 
           });
        }, function(err) {
            // after finding all avatars, return your articles (with avatars if available)
            // back in the response
            res.send(articles);
        });
    });
};