Express Router问题:仅/api路由可用,其他路由无法访问
问题描述
- 访问
/api之外的路由(比如/api/genres)时,弹出错误提示:"An error occurred during a connection to 127.0.0.1." - 访问
http://127.0.0.1:80/api/genres时页面一直无限加载 - 哪怕新建了只包含指定文件的干净项目,问题还是没解决
项目代码
index.js
const express = require("express"); const app = express(); require("./startup/cors")(app); require("./startup/routes")(app); const PORT = process.env.PORT || 80; const server = app.listen(PORT, () => { console.log(`Listening on port ${PORT}...`); });
/startup/routes.js
const express = require("express"); const genres = require("../routes/genres"); const home = require("../routes/home"); module.exports = function (app) { app.use(express.json()); app.use("/api", home); app.use("/api/genres", genres); };
/routes/home.js
const express = require("express"); const router = express.Router(); router.get("/", (request, response) => { return response.send("API HOME"); }); module.exports = router;
/routes/genres.js
const express = require("express"); const router = express.Router(); router.get("/", (request, response) => { return response.status(200).send("success!"); }); module.exports = router;
问题排查与解决
你的路由代码本身没毛病,出现无限加载和连接错误,大概率是CORS中间件出了问题——你引入了./startup/cors但没给这个文件的内容,要么是文件不存在,要么是配置写错了,导致请求被挂起或拦截。
具体解决步骤:
检查CORS文件:
- 如果
/startup/cors.js根本不存在,直接删掉require("./startup/cors")(app);这行,先测试基础功能; - 如果文件存在,确保配置正确,比如标准的CORS配置应该是这样:
// /startup/cors.js 正确示例 const cors = require("cors"); module.exports = function(app) { app.use(cors()); // 开发环境允许所有跨域请求,生产环境可按需配置 };
注意:要先安装cors包,在项目根目录执行
npm install cors。- 如果
测试基础连通性:先去掉CORS中间件,启动服务后访问
http://127.0.0.1:80/api/genres,看能不能正常返回"success!"。如果可以,说明问题肯定出在CORS配置上。换端口测试:端口80是系统默认端口,可能被其他程序占用(比如IIS、Apache)。把PORT改成3000试试:
const PORT = process.env.PORT || 3000;然后访问
http://127.0.0.1:3000/api/genres,看是否正常。确认请求方式:你的
/api/genres只配置了GET请求,如果你用POST等其他方式访问会返回404,但不会无限加载,这个可能性比较低,但也可以确认下。
按上面的步骤排查,应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Autumn V
相关产品推荐
相关产品推荐

