Sun*_*nny 53 middleware node.js express
有一些类似的问题,但我的问题是,如果我想传播我得到的不同路由中间件的中间结果,那么最好的方法是什么?
app.use(f1); app.use(f2); app.use(f3);
function f1(req,res,next) {
//some database queries are executed and I get results, say x1
res.locals.dbResults = {...};
next();
}
function f2(req,res,next) {
// more processing based upon req.locals.dbResults
res.locals.moreResults = {....};
next();
}
// ...
Run Code Online (Sandbox Code Playgroud)
我认为通过使用req .locals ,我可以通过不同的中间件获得相同的数据传播.此外,似乎请求和响应对象都在请求开始时将locals属性初始化为空对象.
另外,还可以设置res.mydata或req.mydata属性吗?
从理论上讲,app.locals也可用于通过不同的中间件传递这些数据,因为它将持续穿过中间件,但这与app.locals的传统使用相反.它更多地用于特定于应用程序的数据.还需要在请求 - 响应周期结束时清除该数据,以便相同的变量可用于下一个请求.
通过中间件传播中间结果的最佳和标准方法是什么?
xav*_*ert 112
如您所述,可以使用两者req.locals,res.locals甚至您自己定义的键res.userData.但是,在使用Express的视图引擎时,您可以res.locals在中间件中设置中间数据,并且该数据将在您的视图中可用(请参阅此文章).通常的做法是在中间件内部设置中间数据req.locals以避免覆盖视图数据res.locals,尽管这没有正式记录.
res.locals 包含作用于请求的响应局部变量的对象,因此仅对在请求/响应周期(如果有)期间呈现的视图可用.否则,此属性与
app.locals.此属性对于公开请求级别信息(例如请求路径名,经过身份验证的用户,用户设置等)非常有用.
| 归档时间: |
|
| 查看次数: |
42643 次 |
| 最近记录: |