在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; ... 

谢谢回答。

       

网上收集的解决方案 "在expressjs中使用next()将variables传递给下一个中间件"

将你的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_VARvariables,你可能要考虑req.YOUR_APP_NAME.YOUR_VARreq.mw_params.YOUR_VAR

它将帮助您避免覆盖其他属性

这是因为reqres是两个不同的对象。

您需要在您添加到的同一个对象上查找属性。