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
相关产品推荐
相关产品推荐

