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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:45:17