Express定义的search路由访问返回404,同规则其他路由正常如何排查
问题根因
你的404错误是Express路由匹配顺序错误导致的:
Express会按照路由定义的先后顺序从上到下匹配请求,你把动态参数路由router.get("/:id", getPost)定义在了固定路径路由router.get("/search", getPostsBySearch)前面,当你请求/posts/search时,Express会把路径里的search识别为/:id的参数值,直接命中getPost路由,永远不会走到/search对应的处理逻辑。
解决方法
调整后端路由的定义顺序,把固定路径的精确匹配路由放到动态参数路由前面:
const router = express.Router(); router.get("/", getPosts); // 先定义精确匹配的search路由 router.get("/search", getPostsBySearch); // 动态参数路由放到后面 router.get("/:id", getPost); router.post("/", auth, createPost); router.patch("/:id", auth, updatePost); router.patch("/:id/likePost", auth, likePost); router.delete("/:id", auth, deletePost); export default router
额外排查点
如果调整顺序后仍然存在问题,可以依次检查:
- 修改后端代码后是否重启了服务
- 前端请求路径是否拼写正确,确认请求路径确实是
/posts/search开头带对应查询参数 - 确认
getPostsBySearch控制器函数已经正确导入并可以正常执行
内容的提问来源于stack exchange,提问作者radbahi
相关产品推荐
相关产品推荐

