使用Express与Nodemon时出现EADDRINUSE错误的解决方法咨询
错误信息(翻译后)
node:events:492
throw er; // 未处理的 'error' 事件
^Error: listen EADDRINUSE: 地址已被使用 :::80
at Server.setupListenHandle [as _listen2] (node:net:1751:16)
at listenInCluster (node:net:1799:12)
at Server.listen (node:net:1887:7)
at Function.listen (C:\Users\anish\OneDrive\Desktop\node javascript\node_modules\express\lib\application.js:635:24)
at Object.(C:\Users\anish\OneDrive\Desktop\node javascript\express\app.js:21:5)
at Module._compile (node:internal/modules/cjs/loader:1256:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
at Module.load (node:internal/modules/cjs/loader:1119:32)
at Module._load (node:internal/modules/cjs/loader:960:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/process/task_queues:82:21) {
code: 'EADDRINUSE',
errno: -4091,
syscall: 'listen',
address: '::',
port: 80
}Node.js v18.17.0
[nodemon] 应用崩溃 - 等待文件变更后重启...
问题原因
报错EADDRINUSE: 地址已被使用 :::80明确说明:你的Express应用要监听的80端口已经被其他程序占用了。
解决方法
方法一:更换Express监听端口
直接修改app.js里的端口配置,把80换成未被占用的端口(比如3000、8080):
// 原代码示例 app.listen(80, () => { console.log('Server running'); }); // 修改后代码 app.listen(3000, () => { console.log('Server running on port 3000'); });
修改后重新运行nodemon app.js即可。
方法二:终止占用80端口的进程
如果一定要用80端口,找到占用端口的程序并关闭:
Windows系统操作:
- 打开命令提示符,执行:
netstat -ano | findstr ":80"
- 复制输出结果最后一列的PID(进程ID,比如
1234) - 执行命令终止进程:
taskkill /PID 1234 /F
macOS/Linux系统操作:
- 打开终端,执行:
lsof -i :80
- 复制对应进程的PID,执行:
kill -9 1234
(把1234替换成实际查到的PID)
方法三:检查本地服务
Apache、Nginx这类Web服务器默认会占用80端口,如果你安装了这类服务,先关闭它们再启动Express应用。
内容的提问来源于stack exchange,提问作者Anish Upreti

