2013-11-25 6 views
1

이제 nodejs 응용 프로그램에 대해 작업하고 있습니다. 하지만 몇 가지 문제가 있습니다.mongo에 대한 비동기 요청을위한 노드 js 미들웨어

그래서 내가 아바타 필드를 추가하여 개체를 게시해야합니다.

다음과 같이 보입니다.

mongodb에는 2 명의 모델 사용자와 게시물이 있습니다. 게시물에 일대 다 관계에 대한 userId 필드가 있습니다. 그리고 화면에는 이미지 태그 용 문자열을 저장하는 아바타가 있습니다.

는하지만 그

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

articles.js/컨트롤러에서 내 집 방법 그래서 사용자 아바타 모든 게시물을 표시합니다 그러나 그것은 작동하지 않습니다. 비동기 문제라는 것을 알고 있습니다. 그러나 나는 그것을 고치는 법을 모른다. 내 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); 
     }); 
    }); 
};