下面是我的设置,我试图将在快速中间件中初始化的对象传递给其他中间件函数。在我的路由器中,调用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中创建的帮助程序传递到路由器的正确方法是什么?
答案 0 :(得分:1)
根据您的意图通过req
或res
传递。
如果数据与请求有关,例如发出请求的用户的身份,会话属性,geoIP或已解析的请求正文,则将其附加到req
对象:
如果数据与响应处理有关,例如模板/视图使用的变量或请求的响应格式,则将其附加到res
对象。
假设您要通过req
传递它:
req.helper = await getConfig();
然后使用它:
function router (req, res) {
const values = req.helper.getValues();
// ...
}