今天在调试项目的时候突然发现
const { name } = ctx.request.body 无法接收到参数了,后来检查了一下代码发现路由中间件和bodyparser中间件的加载顺序错了,导致无法接收参数,正确应该是这样:app.use(bodyParser());
app.use(router.routes()).use(router.allowedMethods());
大概讲一下原理:
在 Koa 中,中间件的执行顺序非常重要,因为 Koa 是基于中间件的架构,所有的中间件都是按顺序执行的。以下是为什么 app.use(bodyParser()); 和 app.use(router.routes()).use(router.allowedMethods()); 的顺序会影响到 ctx.request.body 的原因。
中间件执行顺序
1. bodyParser 中间件:- bodyParser 中间件的作用是解析请求体(如 JSON、表单数据等),并将解析后的数据存储在 ctx.request.body 中。
- 如果 bodyParser 中间件在路由中间件之前执行,它会在请求到达路由处理函数之前解析请求体。
- router.routes() 中间件负责处理路由匹配,将请求分发到相应的路由处理函数。
- router.allowedMethods() 中间件用于设置响应的 HTTP 方法,通常在路由处理之后调用。