Express.js中POST请求报错Cannot POST /api/user/register问题排查
问题分析与修复
你的问题出在路由路径重复配置,导致实际可访问的接口路径和你请求的路径不匹配:
- 在
app.js中,你把路由挂载到了/api/user/register路径下 - 而在
user.routes.js中,又给路由添加了/register的子路径 - 最终实际生效的接口路径是
/api/user/register/register,但你请求的是/api/user/register,自然会返回Cannot POST错误
另外,user.routes.js里的try-catch完全没必要,因为router.route()不会抛出同步异常,这个捕获逻辑起不到任何作用,可以删掉。
修复方案(二选一即可)
方案1:修改路由挂载路径(推荐)
调整app.js中的路由挂载路径,让它只到/api/user层级,这样路由文件里的/register就能对应到你要的/api/user/register:
// app.js import express from 'express'; import router from './routes/user.routes.js' const app = express(); // 修改挂载路径为/api/user app.use("/api/user", router) export {app}
user.routes.js简化后:
// user.routes.js import { Router } from "express"; import { registerUser } from "../controllers/user.controller.js"; const router = Router() router.route("/register").post(registerUser) export default router
方案2:修改路由文件中的路径
如果不想调整挂载路径,就把user.routes.js里的路由路径改成根路径/,这样挂载到/api/user/register后,根路径就对应这个地址:
// user.routes.js import { Router } from "express"; import { registerUser } from "../controllers/user.controller.js"; const router = Router() router.route("/").post(registerUser) export default router
app.js保持不变即可。
额外优化建议
如果后续你的接口需要处理JSON格式的请求体(比如接收注册表单数据),记得在app.js中添加express的JSON解析中间件:
const app = express(); // 添加JSON解析中间件 app.use(express.json()) // 再挂载路由 app.use("/api/user", router)
内容的提问来源于stack exchange,提问作者Arjun Chaudhary
相关产品推荐
相关产品推荐

