在expressjs中使用next()将variables传递给下一个中间件
那么我的问题是我想通过一些variables从第一个中间件到另一个中间件,我尝试这样做,但有req.somevariable是一个给定的'未定义'。
//app.js .. app.get('/someurl/',middleware1,middleware2) ...
////middleware1 ... some conditions ... res.somevariable = variable1; next(); ...
////middleware2 ... some conditions ... variable = req.somevariable; ...
谢谢回答。
将你的variables附加到req
对象上,而不是res
。
代替
res.somevariable = variable1;
有:
req.somevariable = variable1;
编辑:
正如其他人所指出的, res.locals
是通过中间件传递数据的推荐方式。
在我看来,这是res.locals对象的用途。 直接在请求对象上设置variables不被支持或logging。 res.locals保证在请求期间保持状态。
res.locals
包含作用域为请求的响应局部variables的对象,因此仅可用于在请求/响应周期(如果有)期间呈现的视图。 否则,这个属性和app.locals是一样的。
该属性对于公开请求级信息(如请求path名,authentication用户,用户设置等)非常有用。
app.use(function(req, res, next) { res.locals.user = req.user; res.locals.authenticated = ! req.user.anonymous; next(); });
我不认为最好的做法是传递像req.YOUR_VAR
variables,你可能要考虑req.YOUR_APP_NAME.YOUR_VAR
或req.mw_params.YOUR_VAR
它将帮助您避免覆盖其他属性
这是因为req
和res
是两个不同的对象。
您需要在您添加到的同一个对象上查找属性。