JavaScript未处理'error'事件及EADDRINUSE错误的原因与解决咨询
EADDRINUSE: address already in use :::8080 错误 嘿,我来帮你搞定这个头疼的端口占用问题!先给你拆解下这个错误的来龙去脉,再给你几个实用的解决办法。
错误原因拆解
首先看你贴出的报错信息:
events.js:174 throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE: address already in use :::8080
at Server.setupListenHandle [as _listen2] (net.js:1279:14)
...(省略后续栈信息)
这个报错的核心很简单:你要启动的Node.js服务想绑定到8080端口,但这个端口已经被其他进程占用了。结合你提到的“之前的错误代码仍在运行”,大概率是你之前启动的服务实例没彻底停止,一直在后台占用着8080端口。
具体解决方法
1. 停止占用端口的旧进程(最直接)
因为你是在repl.it环境里运行代码,操作很简单:找到页面右上角的Stop按钮,点击它停止之前运行的服务实例。等旧进程彻底退出后,再重新运行你的代码,8080端口就会被释放出来供新服务使用。
2. 修改代码中的端口号
如果不想停止旧进程(或者停止后还是有冲突),可以直接改代码里的端口配置:
找到keep_alive.js里类似这样的代码行:
server.listen(8080);
把8080改成其他未被占用的端口,比如8081、3000或者5000,修改后重新运行代码就不会再出现端口冲突了。
3. 重启repl.it项目环境
如果上面两种方法都没效果,试试刷新repl.it的页面,或者点击项目页面底部的Restart按钮重启整个项目环境,这样可以彻底清除后台残留的进程,释放被占用的端口。
内容的提问来源于stack exchange,提问作者The HungryIronApple

