Express 中间件中的 req.locals、res.locals、res.data、req.data、app.locals

2023-11-23

有人提出了一些类似的问题,但我的问题是,如果我想传播通过不同路由中间件获得的中间结果,最好的方法是什么?

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

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

另外,也可以设置 res.mydata 或 req.mydata 属性吗?

理论上,app.locals 也可用于通过不同的中间件传递此数据,因为它将在中间件之间持续存在,但这与 app.locals 的常规使用相反。它更多地用于应用程序特定的数据。还需要在请求-响应周期结束时清除该数据,以便相同的变量可以用于下一个请求。

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


正如您提到的,两者req.locals, res.locals甚至是您自己定义的密钥res.userData可以使用。但是,当将视图引擎与 Express 一起使用时,您可以设置中间数据res.locals在您的中间件中,并且该数据将在您的视图中可用(请参阅这个帖子)。通常的做法是在中间件内部设置中间数据req.locals以避免覆盖视图数据res.locals,尽管这没有正式记录。

当地人资源包含作用域为请求的响应局部变量的对象,因此仅可用于呈现的视图 在该请求/响应周期(如果有)。否则,这 属性与app.locals.

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

Source: http://expressjs.com/en/api.html#res.locals

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Express 中间件中的 req.locals、res.locals、res.data、req.data、app.locals 的相关文章

随机推荐