eaddrinuse错误表示端口被占用,需先用netstat或lsof查pid,再用taskkill或kill终止进程;也可修改app.listen端口、用port环境变量动态配置,或清理nodemon残留进程。

如果您尝试启动Node.js项目时遇到EADDRINUSE错误,提示端口已被占用,则说明目标端口正被其他进程使用。以下是解决此问题的步骤:
一、查找占用指定端口的进程
通过系统命令定位当前占用端口的具体进程ID(PID),从而判断是否为误占或可终止进程。
1、在终端中执行命令:netstat -ano | findstr :3000(将3000替换为您实际报错的端口号)
2、若系统为macOS或Linux,执行:lsof -i :3000
3、记录输出结果中显示的PID(Windows下为最后一列数字,macOS/Linux下为COMMAND前的数字)
二、终止占用端口的进程
获取PID后,可直接结束该进程以释放端口,确保Node.js服务能正常绑定。
1、Windows系统执行:taskkill /PID 12345 /F(将12345替换为实际查到的PID)
2、macOS或Linux系统执行:kill -9 12345
3、验证端口是否已释放:再次运行查找命令,确认无输出结果
三、修改Node.js项目监听端口
若无法终止原进程或需避免冲突,可临时更改应用监听端口,绕过占用问题。
1、打开项目入口文件(如app.js、server.js或index.js)
2、查找类似app.listen(3000)或server.listen(3000)的语句
3、将端口号改为未被占用的值,例如app.listen(<strong><font color="green">3001</font></strong>)
四、使用环境变量动态指定端口
通过环境变量控制监听端口,提升配置灵活性并便于多环境部署。
1、在启动脚本中设置环境变量:export PORT=3002(macOS/Linux)或 set PORT=3002(Windows)
2、修改代码中监听逻辑为:app.listen(process.env.PORT || 3000)
3、重启项目,此时将优先使用环境变量设定的端口
五、检查开发服务器自动重启残留进程
使用nodemon等热重载工具时,异常退出可能导致旧进程未彻底关闭,持续占用端口。
1、执行ps aux | grep node(macOS/Linux)或 tasklist | findstr node(Windows)
2、识别名称含nodemon、node server.js等的多余进程及其PID
3、对每个可疑PID重复执行终止命令,确保无残留node实例运行










