Next.js Fetch请求被Nest.js错误路由至其他端点问题排查
下面是几个最可能的原因及排查方向:
Next.js服务端fetch的重定向方法转换
Next.js在服务端发起fetch时,若请求触发3xx重定向(比如Nest.js服务器对无尾斜杠的路径自动重定向到带尾斜杠版本),默认会将POST方法转为GET。Postman处理重定向时会保留原请求方法,但Next.js服务端fetch的默认行为会变更方法。
排查:检查请求URL是否和Nest路由完全一致(包括尾斜杠);或者在fetch选项中添加redirect: 'manual',手动处理重定向逻辑;也可以在Nest.js中配置禁用该路径的自动重定向。请求URL或参数拼接错误
仔细核对Next.js中的请求URL:是否误将slug拼接到路径末尾(比如/api/kondos/my-product)而非发送到/api/kondos/findBy?或者是否在请求体中正确携带slug?虽然你说代码正确,但这类拼写/拼接错误很容易忽略,尤其是用模板字符串拼接URL时。Nest.js路由匹配顺序冲突
检查Nest.js的路由定义顺序:如果GET /api/kondos/:slug(findOne)的路由定义在POST /api/kondos/findBy之前,且你的请求URL存在解析歧义(比如不小心把findBy当成了slug参数),Nest会优先匹配先定义的路由。不过Postman能正常匹配,说明这个可能性较低,但仍需确认路由定义的顺序和路径格式是否无冲突。全局中间件/拦截器修改了请求方法
检查Nest.js项目中的全局中间件、拦截器:是否有逻辑在特定条件下修改了请求method?比如某些CORS中间件或自定义日志中间件,可能对Next.js请求的特定头字段做出了方法转换;或者Next.js的fetch自动携带了X-HTTP-Method-Override这类头,导致Nest将POST解析为GET。
内容的提问来源于stack exchange,提问作者Victor Souto

