Node.js Error: listen EADDRINUSE:::

运行Node.js项目时可能会遇到端口被占用的报错。解决方式有两种,一是换端口,二是找出占用端口的程序并关闭或kill掉。文中以9999端口为例,发现是GoAgentX占用了端口,将其关闭或kill后,Node.js项目成功启动。

运行Node.js项目的时候,报错

listen EADDRINUSE :::9999
Error: listen EADDRINUSE :::9999
    at Object.exports._errnoException (util.js:1026:11)
    at exports._exceptionWithHostPort (util.js:1049:20)
    at Server._listen2 (net.js:1257:14)
    at Server._listen2 (/Users/zhaotf/workspaces_node/folivore-api/node_modules/async-listener/index.js:51:23)
    at listen (net.js:1293:10)
    at Server.listen (net.js:1389:5)
    at EventEmitter.express.application.listen (/Users/zhaotf/workspaces_node/folivore-api/node_modules/express.oi/lib/index.js:130:29)
    at Object.listen (/Users/zhaotf/workspaces_node/folivore-api/core/log/logcat.js:67:9)
    at /Users/zhaotf/workspaces_node/folivore-api/server/server.js:42:10
    at /Users/zhaotf/workspaces_node/folivore-api/node_modules/loopback-boot/lib/executor.js:64:5
    at /Users/zhaotf/workspaces_node/folivore-api/node_modules/loopback-boot/node_modules/async/lib/async.js:251:17
    at /Users/zhaotf/workspaces_node/folivore-api/node_modules/loopback-boot/node_modules/async/lib/async.js:154:25
    at /Users/zhaotf/workspaces_node/folivore-api/node_modules/loopback-boot/node_modules/async/lib/async.js:248:21
    at /Users/zhaotf/workspaces_node/folivore-api/node_modules/loopback-boot/node_modules/async/lib/async.js:612:34
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickDomainCallback (internal/process/next_tick.js:122:9)
    at process.fallback (/Users/zhaotf/workspaces_node/folivore-api/node_modules/async-listener/index.js:482:15)
    at Module.runMain (module.js:606:11)
    at run (bootstrap_node.js:394:7)
    at startup (bootstrap_node.js:149:9)
    at bootstrap_node.js:509:3

报错原因:端口被占用

解决方式:

方式一:换端口

方式二:找出占用端口程序,kill掉

这里以9999端口为例

找出占用端口程序。

 ✗ sudo lsof -n -P | grep :9999
Password:
GoAgentX  2659          zhaotf   20u     IPv4 0xe877a1e121c8c2cb        0t0      TCP *:9999 (LISTEN)
GoAgentX  2659          zhaotf   21u     IPv6 0xe877a1e12174845b        0t0      TCP *:9999 (LISTEN)

原来是GoAgentX占用了端口,关闭或 kill掉(kill 2659)GoAgentX,成功启动Node.js。

这个错误: ``` Uncaught Error: listen EADDRINUSE: address already in use :::3000 ``` 意思是:**Node.js 试图监听 3000 端口,但该端口已经被其他进程占用了。** --- ## ✅ 解决方案 ### ✅ 方法一:终止占用 `3000` 端口的进程 #### 👇 在终端执行以下命令查看哪个进程正在使用 3000 端口: ```bash lsof -i :3000 ``` 或者(Windows): ```cmd netstat -ano | findstr :3000 ``` 你将看到类似如下输出: ``` COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 12345 user 20u IPv6 123456 0t0 TCP *:3000 (LISTEN) ``` 记下 **PID(Process ID)**。 #### 👇 然后杀死该进程: ##### macOS / Linux: ```bash kill -9 12345 ``` ##### Windows: ```cmd taskkill /F /PID 12345 ``` --- ### ✅ 方法二:更换你的 Node.js 应用监听的端口 如果你不想或不能杀掉占用 3000 的进程,可以修改你的 Node.js 程序监听的端口号。 #### 示例代码(Express): ```js const app = require('express')(); app.get('/', (req, res) => { res.send('Hello World'); }); const PORT = 3001; // 修改为未被占用的端口 app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`); }); ``` --- ### ✅ 方法三:自动检测并尝试下一个可用端口 你可以让程序自动寻找下一个可用端口,而不是硬编码一个端口: ```js const express = require('express'); const app = express(); app.get('/', (req, res) => { res.send('Hello World'); }); let PORT = 3000; const server = app.listen(PORT, () => { console.log(`Server is running on port ${server.address().port}`); }); server.on('error', (err) => { if (err.code === 'EADDRINUSE') { console.log(`Port ${PORT} is occupied, trying next port...`); server.close(); server.listen(++PORT); } }); ``` --- ## ✅ 总结:如何避免这个问题? | 方法 | 描述 | |------|------| | 查看并结束占用进程 | 快速解决当前问题 | | 更换端口号 | 避免冲突,适合开发环境 | | 自动递增端口 | 更加智能,适合多实例部署或开发工具 | --- ##
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值