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

API路由测试遇404 Not Found错误,求原因排查方案

注册API返回404 Not Found问题排查

后端服务器已正常启动(控制台有启动确认信息),但在Postman/Insomnia中发送POST请求到注册API时始终返回404 Not Found。尝试访问localhost:5000/register和localhost:5000/auth/register均无效。

相关代码

auth.route.js(路径:C:\Users\user\subsApp\backend\routes\auth.route.js)

import express from "express";
import { registerUser } from "../controllers/auth.controller.js";

const router = express.Router();

router.post("/register", registerUser)

export default router;

auth.controller.js

import NewUser from "../models/NewUser.js";
import bcrypt from "bcrypt";
import catchAsyncErrors from "../utils/catchAsyncErrors.js";

export const registerUser = catchAsyncErrors(async (req, res, next) => {
  const {
    username,
    email,
    citizenship,
    academicQualification,
    password,
    confirmPassword,
  } = req.body;

  try {
    // 检查邮箱是否已被注册
    const existingUser = await NewUser.findOne({ email });

    if (existingUser) {
      return res
        .status(400)
        .json({ success: false, message: "User already exists" });
    }

    // 检查密码与确认密码是否匹配
    if (password !== confirmPassword) {
      return res
        .status(400)
        .json({ success: false, message: "Passwords do not match" });
    }

    // 加密密码
    const hashedPassword = await bcrypt.hash(password, 10);

    // 创建新用户实例
    const newUser = new NewUser({
      username,
      email,
      citizenship,
      academicQualification,
      password: hashedPassword, // 存储加密后的密码
    });

    // 保存用户到数据库
    await newUser.save();

    res.status(201).json({ message: "User created Succesfully!" });
    // 发送认证token(注释状态)
    //sendToken(newUser, 201, res);
  } catch (error) {
    // 错误处理
    res.status(500).json({ success: false, message: "Server Error" });
  }
});

server.js

// server.js
import express from 'express';
import cors from 'cors'
import bodyParser from 'body-parser'
import authRoute from './routes/auth.route.js'
import userRoutes from './routes/user.route.js'
import connectDB from './database/db.js';

const server = express();

const corsOptions = {
  origin: 'http://localhost:5173', 
  methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
  allowedHeaders: 'Content-Type,Authorization',
};


server.use(cors(corsOptions));
server.use(bodyParser.json());
server.use(bodyParser.urlencoded({ extended: true }));


// 连接MongoDB
connectDB()
.then(() => console.log("Database connected"))
.catch(err => console.log(err));

// 路由中间件
server.use("/register", authRoute);
server.use("/login", userRoutes);

server.use("/", userRoutes);

// eslint-disable-next-line no-undef
const PORT = process.env.PORT || 5000;
server.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

问题原因与解决方法

核心问题:路由路径叠加导致不匹配

当前server.js中挂载auth路由的代码为:

server.use("/register", authRoute);

而auth.route.js中定义的注册路由是:

router.post("/register", registerUser)

两者叠加后,实际有效的注册API路径是localhost:5000/register/register,你之前尝试的路径均不匹配,因此返回404。

两种修复方案

方案1:调整路由挂载前缀(推荐)

修改server.js中的路由挂载代码,将auth路由挂载到/auth前缀下:

// 替换原有的server.use("/register", authRoute);
server.use("/auth", authRoute);

此时正确请求路径为localhost:5000/auth/register,发送POST请求即可访问注册接口。

方案2:调整路由文件内的路径

修改auth.route.js中的路由定义,去掉内层的/register:

// 替换原有的router.post("/register", registerUser)
router.post("/", registerUser)

此时正确请求路径为localhost:5000/register,发送POST请求即可访问。

额外检查点

  • 确认路由文件导入路径无拼写错误,authRoute确实指向正确的路由文件
  • 修改代码后重启服务器,确保新配置生效
  • 确认请求方法为POST,而非GET(GET请求该路径会返回404,因为仅定义了POST路由)

内容的提问来源于stack exchange,提问作者Shareef

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:50:29