从中间件传递数据的问题

时间:2016-08-05 00:37:08

标签: node.js express middleware

我一直试图用中间件使用Express.js中的请求和响应对象来传递数据,并且出于某种原因,数据被卡在中间件本身的回调函数中。

首先,这是自定义中间件:

// Get list of admins
export var listAdmins = function(req, res, next) {
  var admin = [];

  client.admins.list((res) => {
    var body = res.body.admins;
    // var admin = [];

    body.forEach(function (body) {
      if (body.type === 'admin') {
        admin.push(body);
      }
    });
    req.admins = admin;
    console.log(req.admins);
    console.log('Finished fetching admin data');
    next();
  });
}

回调函数中的注释掉console.log 会提供我想要传递的确切数据,并且该对象可以很好地传递。不幸的是,如果我试图在回调之外抓住它,它总是以未定义的方式出现。我将管理数组对象移到回调之外,认为这是一个范围问题,但它没有解决任何问题。

由于这是一个从API调用函数的函数,我猜这是导致我的问题。我想重用许多这些函数,但如果它是传递数据问题的原因,我会听取建议。任何有助于利用此框架的东西,都非常感谢。 :)

提前谢谢!

编辑:是的,将代码移动到嵌套功能块允许正确设置。

1 个答案:

答案 0 :(得分:1)

client.admins.list() 异步并在设置req.admins之前立即返回。移动传递给client.admins.list()的回调中的最后三行代码 (在末尾)。