【问题标题】:Express request/response chain flow back快速请求/响应链回流
【发布时间】:2021-06-17 09:16:14
【问题描述】:

总的来说,我是 Express 和 Typescript 的新手,我想了解中间件在请求-响应链中的工作方式。下面,我有一个函数,它启动快速服务器并一个接一个地配置两个中间件。

export async function startExpressServer() {
    ...
    app.use(firstMiddleware);
    app.use(secondMiddleware);
    ...
}

我了解请求流经此中间件链。每个中间件都进行自己的处理,然后调用next() 以便将执行传递给下一个中间件。

我的问题是:如果我在第二个中间件中修改/添加数据到 req/res 对象,我可以在第一个中间件中访问这些修改吗?

export const firstMiddleware: Handler = (req, res, next) => {
    // do some processing here
    next(); // call next function to go to secondMiddleware
    
    // can I write some logic here to access the modified req/res objects from the secondMiddleware?
}

export const secondMiddleware: Handler = (req, res, next) => {
    // add something to the req/res objects
    next();
}

基本上,我试图弄清楚请求处理链是单向还是双向。如果数据仅在一个方向流动,您是否知道在我的用例中可能会派上用场的替代方案?

谢谢!

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    我只是要分享我自己的答案,也许它会对某人有所帮助。

    通过一个接一个地添加多个中间件构建的Express请求处理链是一种方式。请求和响应对象在所有中间件中都是同一个对象。

    您可以使用next 继续执行下一个中间件,也可以通过调用res.end()res.json()res.send() 停止它。

    文档很清楚:https://expressjs.com/en/guide/using-middleware.html

    对于我的示例,我希望能够在响应设置之前进行某种后期处理。为此,您必须在执行流程通过res.send 停止之前在每个中间件中添加该逻辑。

    如果您有多个中间件,您可能希望通过包装整个 express.Application 来解决这个问题: https://gist.github.com/devarajchidambaram/aa08ae7116d426e5b8ba5997e4629149

    【讨论】:

      猜你喜欢
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 2022-06-17
      • 2016-07-10
      • 2016-08-07
      • 1970-01-01
      相关资源
      最近更新 更多