You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:26:02