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

Express.js端口5002被占用无法杀死 运行nodemon报EADDRINUSE错误

问题根因

EADDRINUSE端口占用报错的核心原因是代码自身重复监听了同一个端口,不是外部进程占用、也和数据库无关。
你在index.js里写了两行端口监听逻辑:

express().listen(PORT, () => console.log(`Listening on ${PORT}`));
app.listen(process.env.PORT || 5002);

第一行凭空创建了一个没有任何路由配置的空白Express实例,先占用了5002端口,第二行再用你配置了业务路由的app实例监听同一个端口,自然就触发端口占用报错,所以你执行pm2 kill、killall node都没用,只要一运行代码就会自己重复占端口。

修复步骤
  • 删掉冗余的空白Express实例监听代码,只保留你配置了业务路由的app实例的监听逻辑,修改后的端口配置部分如下:
const PORT = process.env.PORT || 5002;
// 删掉之前的 express().listen(...) 那行
app.listen(PORT, () => console.log(`Listening on ${PORT}`));
  • 同步修复代码里的其他隐患,避免后续运行报错:
    1. 重复声明了两次var bodyParser = require("body-parser");,删掉其中一行重复的即可
    2. var mydb = db.db(mydb);这里数据库名称没加引号,会报变量未定义错误,修改为var mydb = db.db("mydb");
  • 重新执行nodemon index.js启动服务即可,端口占用问题已经从根源解决。

内容的提问来源于stack exchange,提问作者vivek kn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:06:06