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

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.我的数据属性也是吗?

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

What is the optimal and standard way to propagate intermediate results through middleware?

推荐答案

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

res.locals

此属性对于公开请求级别的信息非常有用,例如

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

Node.js相关问答推荐

node 无法验证第一个证书

为什么我的表单数据在我的POST请求中作为应用程序/json发送,为什么它返回错误请求错误?

已知NPM无法在node.js V12上运行的问题

如何使用多个参数完成

npm错误;无法解析依赖项:npm ERR!对等webpack@;5.x.x;来自@webpack-cli/serve@2.0.5";

一个大型的单个 Redis 实例可以处理所有事情,还是多个 Redis 实例?

我的 React + Express 应用程序不断向我的数组添加一个空对象

将图像添加到多个产品的条带 checkout 会话中

Promise 和 Azure 语音转文本

Node.js中使用ffmpeg如何获取视频截图的位置?

未捕获的错误: 只能用作 元素的子元素,永远不会直接呈现.请将您的 包裹在

如何在不使用位置运算符 $ 的情况下更新 mongodb 文档中数组中的嵌套文档?

Discord.js V14 interaction.editReply 给出了一个无效的 webhook 令牌错误

GridFS 大文件下载使 Node.js 服务器崩溃. MongoServerError:排序超出了字节的内存限制

如何在 node 调试器中禁用第一行中断

如何使用适用于 Node.js 的 AWS 开发工具包将 Amazon S3 中的所有对象从一个前缀复制/移动到另一个前缀

node.js 中存储的模块变量在什么范围内?

Node.js:如何附加到正在运行的进程并使用控制台调试服务器?

Heroku + Node:找不到模块错误

Puppeteer 等待所有图像加载然后截图