如何修复Node Express报错cannot GET及EADDRINUSE端口占用问题
问题诊断与修复方案
1. 端口占用(EADDRINUSE)问题
原因
- 你的
server/index.js中重复调用了两次app.listen(PORT),同一个端口被重复监听,首次启动时第一次listen会成功,第二次listen直接触发端口占用报错 - 首次启动后如果没有正确关闭Node进程,进程会一直在后台占用3001端口,后续启动也会触发该报错
修复步骤
- 第一步:删除
server/index.js中重复的app.listen代码,仅保留一次即可,修改后代码如下:
const express = require("express"); const PORT = process.env.PORT || 3001; const app = express(); app.get("/api", (req, res) => { res.json({ message: "Hello from server!" }); }); // 仅保留一次listen调用 app.listen(PORT, () => { console.log(`Server listening on ${PORT}`); });
- 第二步:杀掉当前占用3001端口的后台进程:
- Mac/Linux系统执行命令:
lsof -ti:3001 | xargs kill -9 - Windows系统在cmd中执行:
- 执行
netstat -ano | findstr "3001",查询到占用3001端口的进程PID - 执行
taskkill /F /PID 你查到的PID号
- 执行
- Mac/Linux系统执行命令:
2. 404 Cannot GET 报错问题
原因
你只定义了/api路径的GET请求处理逻辑,但你在浏览器访问的是localhost:3001(对应根路径/),服务端没有配置根路径的路由,自然返回404。
修复方案
二选一即可:
- 方案1:直接访问
http://localhost:3001/api,即可正常拿到你定义的JSON返回结果 - 方案2:在服务端代码中补充根路径路由配置,示例:
// 在app.listen之前添加如下代码 app.get("/", (req, res) => { res.send("后端服务运行正常,如需接口数据请访问 /api 路径"); });
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

