使用router.route()定义路由无法匹配请求路径问题排查
问题场景
项目开发时定义了一个POST路由,通过Postman发请求触发时始终返回异常响应。
- 发送的请求详情:

- 返回的异常响应:

对应路由定义代码:
router.route('/newarrivals/demo').post( async(req,res) => { // 业务逻辑代码 });
排查解决方法
按以下优先级逐一排查即可定位问题:
- 核对请求基础配置
确认Postman选中的请求方法为POST,请求路径与路由定义完全匹配:注意检查字段拼写、斜杠数量是否正确,不要遗漏路由的挂载前缀——如果当前router是通过app.use('/api', router)这类方式挂载的,完整请求路径需要加上对应前缀,比如上述例子的完整请求路径应为/api/newarrivals/demo;同时确认Postman填写的端口和服务实际启动端口一致。 - 检查路由注册规则
路由匹配存在先后优先级,如果同前缀的动态路由(比如/newarrivals/:id)注册在当前路由前面,请求会被前置路由优先拦截,导致当前路由不生效,需要把精确路径的路由放在动态路由之前注册;同时确认当前路由所在文件已经在服务入口正确引入、挂载,没有漏注册。 - 确认服务加载状态
修改路由代码后必须重启服务才能生效,即使用了热更新也要确认更新是否正常触发。可以在路由处理函数第一行加日志打印,发请求后看日志是否输出,判断请求有没有真正进入当前路由的处理逻辑。 - 排查前置拦截逻辑
如果服务前部署了Nginx、API网关等代理层,检查代理转发规则是否正确,有没有拦截该路径的请求;同时检查项目内的全局中间件、跨域配置、权限校验逻辑,有没有在路由匹配前就直接返回异常响应。 - 检查路由内部代码
如果请求已经进入路由处理函数,检查异步逻辑是否做了异常捕获,有没有漏写res.send()/res.json()等响应返回逻辑,未捕获的报错、未返回响应都会触发异常结果。
内容的提问来源于stack exchange,提问作者Aditya Tiwari
相关产品推荐
相关产品推荐

