【问题标题】:Nodejs Express how to write middleware to handle all responseNodejs Express 如何编写中间件来处理所有响应
【发布时间】:2018-10-17 02:33:34
【问题描述】:

在 node JS Express 中,我们可以编写中间件来拦截对任何一方的请求

  1. 通过调用next 调用链中的下一个中间件
  2. 通过调用res.sendres提供的类似函数结束链

这意味着,每次我们想在特定的中间件中结束请求并发送响应时,我们都必须(至少)添加以下 sn-p。

res.send();

有没有办法像这样写一个响应帧中间件:

responseFrame = (res,req,responseData) => {
    res.send(responseData);
}

和insinde route.js,在所有路径上使用这个中间件

app.use(responseFrame);

然后,我们只需要用next() 结束任何中间件,只要我们定义正确的路由,Express 就会负责发送响应(如果下一个中间件是responseFrame

【问题讨论】:

  • 如果我理解正确的话,你想在你的中间件之间传输数据吗?如果你愿意,你可以简单地在 req 对象中设置局部变量。第三个参数总是由 express 填充堆栈中的下一个中间件。
  • 您想编写一个中间件,负责自动为每条路由发送响应吗?如果我错了,请纠正我。
  • @Lasoloz 是的,我想要实现我想要的,我需要在中间件之间传输数据,但如果有其他方式(除了编写单独的中间件),我会全力以赴。但是我不喜欢修改 req 对象,它看起来有点违反直觉。
  • @Farhan 我想为所有可能的响应编写一个包装器。我仍然以不同的方式处理不同的路线,但响应框架始终相同。我不想每次响应时都写那个框架。
  • 我通过编写一个名为sendResponse 的辅助方法来实现这一点,而不是使用res.send() 我使用sendResponse(res, data)

标签: node.js express


【解决方案1】:

您可以为此使用 res.locals。

https://expressjs.com/en/api.html#res.locals

【讨论】:

  • 如果我需要从以前的中间件传递一个参数,除了修改req对象还有其他方法吗?
  • 好吧,这是你的答案 - stackoverflow.com/questions/18875292/…
  • 谢谢,res.locals 的链接很好!我不知道。我想我可以用它来写一个 responseFrame 中间件,传入数据而无需修改 req 对象。对我来说这听起来很合乎逻辑,因为快递文档说An object that contains response local variables scoped to the request, and therefore available only to the view(s) rendered during that request / response cycle 这听起来像是我应该从以前的中间件中获取更多信息的地方。如果您可以将此作为答案重新发布,我很乐意接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-30
  • 2016-03-23
  • 1970-01-01
  • 2021-11-26
  • 2021-04-22
相关资源
最近更新 更多