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}`));
- 同步修复代码里的其他隐患,避免后续运行报错:
- 重复声明了两次
var bodyParser = require("body-parser");,删掉其中一行重复的即可 var mydb = db.db(mydb);这里数据库名称没加引号,会报变量未定义错误,修改为var mydb = db.db("mydb");
- 重复声明了两次
- 重新执行
nodemon index.js启动服务即可,端口占用问题已经从根源解决。
内容的提问来源于stack exchange,提问作者vivek kn
相关产品推荐
相关产品推荐

