nodejs遇到的一个小问题分享给大家

今天在调试项目的时候突然发现

   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 中间件在路由中间件之前执行,它会在请求到达路由处理函数之前解析请求体。
 
2. router.routes() 和 router.allowedMethods() 中间件:
 
  • router.routes() 中间件负责处理路由匹配,将请求分发到相应的路由处理函数。
 
  • router.allowedMethods() 中间件用于设置响应的 HTTP 方法,通常在路由处理之后调用。
 

错误顺序的影响

 
如果你将 router.routes() 放在 bodyParser() 之前,路由处理函数会在请求体被解析之前执行。这意味着在路由处理函数中,ctx.request.body 还没有被填充,因此你无法访问到请求体中的参数。
posted @ 2024-08-05 14:11  洛晨随风  阅读(7)  评论(0编辑  收藏  举报