Express 中间件中的 req.local 对 res.local 对 res.data 对 req.data 对 app.local

有一些类似的问题,但我的问题是,如果我想传播中间结果,我沿着不同的路由中间件,什么是最好的方式做到这一点?

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();
}
// ...

我认为我可以通过使用 请求.local 在不同的中间件中获得相同的数据传播。此外,请求和响应对象似乎都具有在请求开始时初始化为空对象的局部变量属性。

还可以设置 res.mydata 或 req.mydata 属性?

从理论上讲,app.local 也可以用来通过不同的中间件传递这些数据,因为它将持久存在于中间件之间,但是这与使用 app.local 的传统做法相反。它更多地用于应用程序特定的数据。还有必要在请求-响应周期结束时清除这些数据,以便下一个请求可以使用相同的变量。

通过中间件传播中间结果的最佳和标准方法是什么?

104292 次浏览

正如您提到的,req.localsres.locals甚至您自己定义的键 res.userData都可以使用。但是,当在 Express 中使用视图引擎时,可以在中间件中的 res.locals上设置中间数据,这些数据将在视图中可用(请参见 这篇文章)。通常的做法是在 req.locals上的中间件中设置中间数据,以避免在 res.locals中覆盖视图数据,尽管没有正式的文档说明这一点。

当地人 一个对象,包含作用域为请求的响应局部变量,因此仅对呈现的视图可用 在该请求/响应周期内(如有的话) 属性与 app.locals相同。

此属性对于公开请求级信息非常有用,如 请求路径名、经过身份验证的用户、用户设置等。

资料来源: http://expressjs.com/en/api.html#res.locals