Express路由配置无效,访问/api/v1/games返回404错误求助
Express路由404问题排查
我是Web开发新手,已经把代码精简到最简形式,但Express路由仍无法正常工作。调用GET localhost:3000/api/v1/games时返回404 Not Found,控制台无任何输出。查阅过教程、Express文档及相关帖子,仍未找到问题所在。相关代码及请求响应信息如下:
app.js
const express = require('express'); const cors = require('cors'); require('dotenv').config(); const port = process.env.PORT || 3000; const apiPath = process.env.API_PATH || '/api/v1'; const gamesRoute = require('./routes/gamesRoute'); const app = express(); app.use(cors()); app.use(express.json()); app.use(`${apiPath}/games`, gamesRoute); // 启动服务器,绑定指定端口 app.listen(port, function() { // 服务器启动成功时打印日志 console.log(`Server is running on port ${port}`); }); app.get('/', function(req, res) { res.send("test"); });
gamesRoute.js
const express = require('express'); const router = express.Router(); router.get('/', async function(req, res) { console.log("test"); res.json({ msg: "test" }); }); module.exports = router;
请求响应(使用VSCode插件'humao.rest-client'发起请求)
HTTP/1.1 404 Not Found X-Powered-By: Express Access-Control-Allow-Origin: * Content-Security-Policy: default-src 'none' X-Content-Type-Options: nosniff Content-Type: text/html; charset=utf-8 Content-Length: 151 Date: Wed, 10 Jan 2024 11:46:35 GMT Connection: close <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Error</title> </head> <body> <pre>Cannot GET /api/v1/games</pre> </body> </html>
问题排查方向
1. 检查环境变量API_PATH的值
代码中用process.env.API_PATH || '/api/v1'定义基础路径,如果.env文件里设置了API_PATH为其他值(比如/api),实际挂载的路由路径会变成/api/games,和你请求的/api/v1/games不匹配,导致404。
解决方法:
- 暂时注释环境变量代码,直接硬编码路径测试:
const apiPath = '/api/v1'; - 查看
.env文件,确认API_PATH取值正确,不需要自定义的话可以直接删除该变量。
2. 调整app.listen的位置
虽然Express允许启动服务器后注册路由,但建议把app.listen放在所有路由、中间件定义的最后,避免潜在的加载顺序问题:
// 所有路由、中间件定义放在前面 app.use(cors()); app.use(express.json()); app.use(`${apiPath}/games`, gamesRoute); app.get('/', function(req, res) { res.send("test"); }); // 最后启动服务器 app.listen(port, function() { console.log(`Server is running on port ${port}`); });
3. 验证路由模块是否正确加载
在挂载路由后添加日志,确认路径是否正确:
app.use(`${apiPath}/games`, gamesRoute); console.log(`路由已挂载至:${apiPath}/games`);
启动服务器后查看控制台输出,确认路径和你请求的/api/v1/games一致。
4. 检查文件路径大小写(针对Linux/macOS环境)
如果是Linux或macOS环境,文件路径区分大小写,要确认routes文件夹名称、gamesRoute.js文件名和代码里的require('./routes/gamesRoute')完全一致(比如不要写成Routes或GamesRoute.js)。
内容的提问来源于stack exchange,提问作者massacring
相关产品推荐
相关产品推荐

