某GET请求(/creation/add)失效其余正常,多方案排查仍未解决
兄弟,我之前踩过几乎一模一样的路由坑,给你列几个实打实的排查方向,你挨个试一遍,大概率能解决:
先查路由注册顺序!
这是最容易踩的坑——如果你的/creation相关路由里有带参数的规则(比如/creation/:id)或者通配路由,而且它的注册顺序在/creation/add前面,那服务器会把/creation/add里的add当成参数匹配到前面的路由,导致你的/creation/add根本不会被触发。
举个Express里的错误示例:// 错误:带参数的路由先注册,会拦截/creation/add app.post('/creation/:id', (req, res) => { res.send('处理单个creation'); }); // 这个路由永远不会执行 app.get('/creation/add', (req, res) => { console.log('测试打印'); res.send('添加creation'); });解决办法:把具体的
/creation/add路由放在所有带参数、通配的/creation路由前面注册。检查中间件是否拦截了请求
看看有没有全局中间件或者/creation路由级的中间件,在到达/creation/add之前就调用了res.send()、res.end()或者抛出了错误,导致后续路由逻辑直接终止。你可以在/creation/add路由的第一行加个最基础的打印:app.get('/creation/add', (req, res) => { console.log('=====进入/creation/add路由了====='); // 其他逻辑 });如果控制台连这个打印都没有,那肯定是请求根本没走到这个路由,要么是路由没注册上,要么是被前面的中间件/路由截胡了。
检查路由注册的语法细节
有没有可能复制代码的时候犯了低级错误?比如:- 路由路径写错了,比如把
/creation/add写成了/creationadd(少了斜杠) - HTTP方法写错了,比如你测试的是GET,但代码里写的是
app.post - 框架的路由装饰器/配置写错了(比如用NestJS、Koa-router的时候,路由前缀或嵌套配置出错)
- 漏了括号、逗号这类语法错误,导致路由根本没被成功注册
- 路由路径写错了,比如把
确认服务器是否重启生效
别笑,这是很多人忽略的点!如果你改了路由代码,但服务器没重启(比如用nodemon但没监听路由文件的变化),那旧的路由配置还在运行,你的新路由自然不会生效。手动重启服务器再测试一次。排查测试工具的问题
比如用Postman或浏览器测试时,是不是路径里多了空格、大小写不对(部分服务器严格区分大小写),或者请求头里的参数导致解析异常?比如POST请求时Content-Type没设置正确,但你说GET也不行,这条可以最后再查。
内容的提问来源于stack exchange,提问作者sub

