我一直试图用中间件使用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调用函数的函数,我猜这是导致我的问题。我想重用许多这些函数,但如果它是传递数据问题的原因,我会听取建议。任何有助于利用此框架的东西,都非常感谢。 :)
提前谢谢!
编辑:是的,将代码移动到嵌套功能块允许正确设置。
答案 0 :(得分:1)
client.admins.list()
异步并在设置req.admins
之前立即返回。移动传递给client.admins.list()
的回调中的最后三行代码 (在末尾)。