2013-11-25 93 views
1

現在我正在關於我的nodejs應用程序。但我有一些問題。節點js中間件異步請求mongo

所以我需要添加頭像字段來發布對象。

它看起來像這樣。

在mongodb中有2個模型用戶和帖子。 Post有一個用於一對多關係的userId字段。用戶有頭像是我在屏幕上存儲圖像標記的字符串。

但我要顯示所有使用後用戶數碼形象,使從控制器我家法/ 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結構。而且我不想在每次請求期間獲得所有帖子和所有用戶。所以,也許你幫助我吧。它桅杆與中間件 - 但我已經嘗試過,它並沒有幫助。

回答

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