将通过快速中间件初始化的对象传递给下一个中间件

时间:2019-10-28 00:28:04

标签: node.js express

下面是我的设置,我试图将在快速中间件中初始化的对象传递给其他中间件函数。在我的路由器中,调用helper.getValues()并得到一个错误,我无法调用未定义的函数getValues

let helper; // no initial value

const getConfig = async () => {
    config = await service.getConfig(configName);
    helper = new Helper(config);    // Helper is correctly initialized here
};

// declare a new express app
let app = express();


app.use(async function (req, res, next) {
    try {        
        await getConfig(); // invoke the code that initializes my helper       
        next();
    } catch (e) {
        console.error(e);
    }
});


app.use('/path', MyRouter(helper)); // Pass helper to router - it's undefined in router code

我的路由器构造器看起来像这样

function MyRouter(helper) {
   ...
   ... const values = helper.getValues();
}

将在getConfig中创建的帮助程序传递到路由器的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

根据您的意图通过reqres传递。

如果数据与请求有关,例如发出请求的用户的身份,会话属性,geoIP或已解析的请求正文,则将其附加到req对象:

如果数据与响应处理有关,例如模板/视图使用的变量或请求的响应格式,则将其附加到res对象。

假设您要通过req传递它:

req.helper = await getConfig();

然后使用它:

function router (req, res) {
    const values = req.helper.getValues();

    // ...
}