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

MERN栈项目GET请求返回404错误问题求助

问题描述

MERN栈项目本地调试时,GET接口请求始终返回404错误,相关代码如下:

入口文件 server/index.js

import express from "express";
import mongoose from "mongoose";
import cors from "cors";

import usersRoutes from "./routes/users.route.js";

const app = express();
app.use(cors());
app.use("/users", usersRoutes);

const CONNECTION_URL =
  "mongodb+srv://...";

const PORT = process.env.PORT || 3001;
mongoose.connect(CONNECTION_URL);

app.listen(PORT, () => {
  console.log(`Server running on Port: http://localhost:${PORT}`);
});

路由文件 server/routes/users.route.js

import express from "express";
import UserModel from "../models/Users.js";

const router = express.Router();

router.get("/getUsers", (req, res) => {
  UserModel.find({}, (err, result) => {
    if (err) {
      res.json(err);
    } else {
      res.json(result);
    }
  });
});

export default router;

模型文件 server/models/Users.js

import mongoose from "mongoose";

const UserSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  age: {
    type: Number,
    required: true,
  },
  username: {
    type: String,
    required: true,
  },
});

const UserModel = mongoose.model("users", UserSchema);
export default UserModel;
问题原因

404错误本质是请求的路径在服务端没有匹配到对应路由,结合代码逻辑,90%以上的概率是以下原因:

  • 请求路径不匹配:用户路由被挂载在/users前缀下,路由内部定义的路径是/getUsers,因此接口完整路径为http://localhost:<服务端口>/users/getUsers,如果直接请求/getUsers或者根路径,必然返回404。
  • 请求发错端口/未配置代理:MERN栈前端默认运行在3000/5173等开发端口,后端运行在3001端口,如果前端发请求时没有写全后端地址,也没有配置开发代理,请求会被发送到前端服务的端口,前端服务没有对应路由自然返回404。
  • 路由未正确加载:如果导入路由时文件路径、文件名大小写写错(Windows不区分文件名大小写,但macOS/Linux区分),路由文件加载失败,所有/users开头的请求都会返回404。
修复步骤
  • 第一步:确认服务启动状态
    启动后端后先看控制台有没有报错,如果出现模块找不到的错误,优先检查import语句里的文件路径、文件名大小写,确保路由文件被正确加载。如果没有报错,记录控制台打印的实际监听端口,避免端口被占用导致服务跑在非预期端口上。
  • 第二步:校验后端路由可用性
    在入口文件添加根路径测试路由,快速验证服务是否正常响应:
    // 加在app.use("/users", usersRoutes);前面即可
    app.get("/", (req, res) => res.send("Server is running"));
    
    先用浏览器/Postman访问http://localhost:<实际监听端口>/,如果能看到返回内容,再访问http://localhost:<实际监听端口>/users/getUsers,如果这个地址能正常返回数据,说明后端路由本身没有问题,故障出在前端请求配置上。
  • 第三步:修复前端请求配置
    要么前端请求时写全后端完整地址,以axios为例:
    axios.get("http://localhost:3001/users/getUsers")
    
    要么给前端开发服务配置代理,将/users开头的请求转发到后端3001端口,不用每次写全后端地址。
  • 第四步:补全必要中间件(非404诱因,但必须添加,否则后续POST接口会无法解析请求体)
    在app.use(cors())后添加两行中间件:
    app.use(express.json());
    app.use(express.urlencoded({ extended: true }));
    
  • 第五步:优化数据库连接逻辑
    给mongoose连接加成功/失败回调,方便后续排查数据库相关问题:
    mongoose.connect(CONNECTION_URL)
      .then(() => console.log("MongoDB connected successfully"))
      .catch(err => console.log("MongoDB connection fail:", err));
    
    数据库连接失败不会触发404,但会导致接口返回数据库错误,提前加日志可以减少后续排查成本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:27:17