【问题标题】:Node js middleware for async request to mongo用于对 mongo 的异步请求的节点 js 中间件
【发布时间】:2013-11-26 04:39:44
【问题描述】:

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

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

看起来像这样。

在 mongodb 中有 2 个模型用户和帖子。帖子具有用于一对多关系的 userId 字段。如果我在屏幕上存储图像标签的字符串,则用户有头像。

但我想显示所有带有用户头像的帖子,所以这是我在 controllers/articles.js 中的 home 方法

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 结构。而且我不想在每个请求期间获得所有帖子和所有用户。所以也许你能帮我解决这个问题。它与中间件有关-但我已经尝试过,但没有帮助。

【问题讨论】:

    标签: javascript node.js mongodb express


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-23
      • 2013-05-15
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      • 2020-03-30
      • 1970-01-01
      相关资源
      最近更新 更多