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

Node.js服务器404错误:拆分API到路由文件后无法访问

问题原因

你在route.js里重新创建了一个独立的express实例app,但这个实例和index.js中启动监听的app毫无关联——相当于给另一个没运行的服务器加了路由,自然访问不到,返回404。

解决方法(两种可选)

方法一:传递主app实例到路由函数

修改index.js,调用calling时把主app传进去:

import express from "express";
import Connection from "../backend/connection.js";
import dotenv from "dotenv";
import calling from "./data/routes/route.js";

dotenv.config();
const USERNAME = process.env.DB_USERNAME;
const PASSWORD = process.env.DB_PASSWORD;

const PORT = 5000;
const app = express();
app.listen(PORT, () => {
  console.log(`Server Started on Port ${PORT}`);
});

Connection(USERNAME, PASSWORD);

// 把主app实例传给calling函数
calling(app);

修改route.js,不再创建新app,而是使用传入的实例:

// 不需要再import express创建新实例
const calling = (app) => {
  app.get("/blogs", (req, res) => {
    res.send("Yes");
  });
};

export default calling;

方法二:使用Express Router(更规范的路由拆分方式)

这是Express官方推荐的路由组织方式,适合复杂项目的路由拆分。

修改route.js,创建并导出Router实例:

import express from "express";

// 创建Router实例
const router = express.Router();

// 在Router上定义路由
router.get("/blogs", (req, res) => {
  res.send("Yes");
});

// 导出Router
export default router;

修改index.js,挂载这个Router到主app上:

import express from "express";
import Connection from "../backend/connection.js";
import dotenv from "dotenv";
// 导入Router
import blogRouter from "./data/routes/route.js";

dotenv.config();
const USERNAME = process.env.DB_USERNAME;
const PASSWORD = process.env.DB_PASSWORD;

const PORT = 5000;
const app = express();
app.listen(PORT, () => {
  console.log(`Server Started on Port ${PORT}`);
});

Connection(USERNAME, PASSWORD);

// 挂载Router,指定前缀(可选,比如"/api")
app.use("/", blogRouter);
// 如果需要前缀可以写成 app.use("/api", blogRouter),这时访问地址是 /api/blogs

这样修改后,路由就会正确挂载到运行的服务器上,访问/blogs就能正常返回内容了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:13:30