节点js中间件asynchronous请求mongo

现在我正在关于我的nodejs应用程序。 但是我有一些问题。

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

它看起来像这样。

在MongoDB中有2个模型用户和post。 发布有userId字段为一对多的关系。 和用户有头像是我在屏幕上存储图像标记的string。

但是我想显示所有post与用户头像,这是我的家庭方法从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 }) }) }) } 

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

underscore.each()不适用于此。 你需要使用像async.each()这样的东西,以确保你得到所有的头像,然后将结果返回到响应中。 有些事情是这样的(你可能需要做一些error handling):

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