当前位置: 首页 > 面试题库 >

Express中间件中的req.locals与res.locals与res.data,req.data与app.locals

隆芷阳
2023-03-14
问题内容

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

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
通过不同的中间件获得相同的数据传播。同样,请求和响应对象似乎都具有在请求开始时初始化为空对象的locals属性。

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

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

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


问题答案:

如前所述,可以使用req.localsres.locals甚至res.userData可以使用您自己定义的密钥。但是,当将视图引擎与Express一起使用时,您可以res.locals在中间件中设置中间数据,并且这些数据将在您的视图中可用。通常的做法是在中间件内部设置中间数据req.locals,以免覆盖中的视图数据res.locals,尽管这尚未正式记录。

res.locals
一个对象,该对象包含范围为请求的响应局部变量,因此仅可用于在该请求/响应周期(如果有)中呈现的视图。否则,此属性与相同app.locals

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

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



 类似资料:
  • 在faygo中,操作与中间件使用同一个接口实现,因此实际上每次请求调用的是一条有序、步阶可控的操作链。 操作链在每次请求中匹配到路由后被调用执行。 操作与中间件的接口定义: Handler interface { Serve(ctx *Context) error } 通常我们使用function或struct来实现操作或中间件。 从业务层面区分操作与中间件: 每个URL对应的操作链[]Han

  • rightReduce与中间件compose 然后,有心同学可能会发现,我们的makeTravel其实是一个对函数列表进行rightReduce的函数: <?php function compose(...$fns) { return array_right_reduce($fns, function($carry, $fn) { return function() us

  • 本文向大家介绍node.js中express中间件body-parser的介绍与用法详解,包括了node.js中express中间件body-parser的介绍与用法详解的使用技巧和注意事项,需要的朋友参考一下 前言 Node中的核心模块分两类:一类是自带的核心模块,如http、tcp等,第二类是第三方核心模块,express就是与http对应的第三方核心模块,用于处理http请求。express

  • 在理念上,Koa 旨在 “修复和替换节点”,而 Express 旨在 “增加节点”。 Koa 使用Promise(JavaScript一种异步手段)和异步功能来摆脱回调地狱的应用程序,并简化错误处理。 它暴露了自己的 ctx.request 和 ctx.response 对象,而不是 node 的 req 和 res 对象。 另一方面,Express 通过附加的属性和方法增加了 node 的 re

  • 我有一个电子商务网站,可以重定向到使用Omnipay的Paypal express结账。它将正确地将用户重定向到Paypal,并返回一条成功的消息,其中包含PayRid和所有内容。然而,它实际上并不接受任何付款,也不会像任何付款一样出现在我们的paypal帐户上。我不确定这是paypal的问题还是Omnipay的配置问题。我可以想象Paypal会处理这一部分,但因为它不起作用(在我们的旧网站上,它

  • 问题内容: 嗨,我对Express中使用res(Express响应对象)和res.locals有一些新手问题。 在其中一个代码示例中研究nodejs时,有一个中间件(messages.js),一个服务器(app.js)和模板(messages.ejs)。查看模板的示例代码。看来尽管将message和removeMessages()分配给了res.locals。您可以使用message或remove