启动node服务器时报错 events.js:352 throw er; // Unhandled ‘error‘ event ^ Error: listen EADDRIN

在启动node服务器的时候报错

events.js:352
throw er; // Unhandled ‘error’ event
^

Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (net.js:1320:16)
at listenInCluster (net.js:1368:12)
at Server.listen (net.js:1454:7)
at Function.listen (E:\workspace\xin\four\day03\server\node_modules\express\lib\application.js:618:24)
at Object. (E:\workspace\xin\four\day03\server\app.js:152:8)
at Module._compile (internal/modules/cjs/loader.js:1085:14)
at Object.Module._extensions…js (internal/modules/cjs/loader.js:1114:10)
at Module.load (internal/modules/cjs/loader.js:950:32)
at Function.Module._load (internal/modules/cjs/loader.js:790:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12)
Emitted ‘error’ event on Server instance at:
at emitErrorNT (net.js:1347:8)
at processTicksAndRejections (internal/process/task_queues.js:82:21) {
code: ‘EADDRINUSE’,
errno: -4091,
syscall: ‘listen’,
address: ‘::’,
port: 3000
}

原因:端口号被占用

cmd打开输入netstat -aon|findstr “3000” 查找端口为3000的进程,得到端口pid

C:\Users\web>netstat  -aon|findstr  "3000"
  TCP    0.0.0.0:3000           0.0.0.0:0              LISTENING       10956
  TCP    [::]:3000              [::]:0                 LISTENING       10956

C:\Users\web>taskkill -PID 10956 -F
成功: 已终止 PID 为 10956 的进程。

C:\Users\web>
### 解决 Node.js 中未处理的 'error' 事件异常 在 Node.js 应用程序中,`EventEmitter` 是核心组件之一,用于实现异步通信中的发布/订阅模式[^1]。当 `EventEmitter` 发生错误时,默认情况下会抛出 `'error'` 事件。如果该事件没有被监听,则会导致应用程序崩溃并抛出 `Unhandled 'error' event` 异常。 为了防止这种情况发生,建议采取以下措施: #### 添加 Error Event Listener 确保为所有的 `EventEmitter` 实例添加至少一个 `'error'` 事件处理器来捕获潜在的错误情况。这可以通过简单的 `.on('error', callback)` 方法完成。 ```javascript const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); myEmitter.on('error', (err) => { console.error(`Caught an error: ${err.message}`); }); ``` #### 使用 try-catch 结构包裹异步操作 对于那些可能会失败的操作(比如文件读取、网络请求等),可以考虑使用同步方法或者通过 Promise 和 async-await 来简化错误处理逻辑,并利用 try-catch 块捕捉可能出现的问题。 ```javascript async function performOperation() { try { await someAsyncAction(); } catch (error) { // Handle the specific error here. console.log(error); } } ``` #### 设置全局 Uncaught Exception Handler 虽然这不是最佳实践,但在某些场景下设置全局级别的未捕获异常处理器可以帮助开发者了解哪些地方出现了意外状况。 ```javascript process.on('uncaughtException', err => { console.error('There was an uncaught error', err); process.exit(1); // mandatory as per the Node.js docs }); ``` 需要注意的是,在生产环境中应谨慎使用此方式,因为它可能导致难以调试的行为以及隐藏真正的问题所在。 #### 处理特定模块内的错误边界 针对像 HTTP 或 WebSocket 这样的长期运行的服务端口连接,可以在服务层面上定义更细粒度的错误恢复机制,例如重试策略或是优雅关闭现有链接后再重启新实例。 ```javascript server.on('clientError', (conn, ex) => { conn.destroy(); // destroy any socket that has been half-opened due to client errors }); ``` 以上几种方案可以根据实际需求组合运用,从而有效减少因未处理的 `'error'` 事件而导致的应用终止风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值