NodeJS 基于中间件的Koa上下文变异

pjngdqdw  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(102)

我有一个用Typescript写的Koa服务器。我想编写中间件来解析请求体,并通过上下文将它们传递给路由。为了做到这一点,我必须通过中间件改变上下文类型。有没有人知道这是可能的,或者有更好的方法来处理这个问题?我知道我可以编写一个正文解析函数并在路由中调用它,但中间件似乎是一个合适的地方来做这件事。
谢谢!

px9o7tmv

px9o7tmv1#

我研究了Koa的类型,似乎State类型是答案。Koa中间件可以是类型化的,并包含对Koa的state参数的修改。这可以通过如下键入应用程序来完成

const app = new Koa<{}, KoaContext>()

其中空对象表示空状态。
然后,中间件可以这样键入

module MyMiddleware {
  export const parseBodyMiddleware: Middleware<MyBodyType> = async (ctx, next) => {
    const body: MyBodyType = ...
    ctx.state = body
    await next();
  };
}

这将koa的ctx.stateMyBodyType一起键入。目前还没有强制要求中间件用该类型更新状态,但如果我在那里找到解决方案,就会更新。

相关问题