Node.js 错误:监听 EADDRINUSE:地址已在使用中

这篇快速文章向您展示了如何解决使用 Node.js 时可能遇到的常见错误。

问题

在开发 Node.js 应用程序(使用 Express.js)时,我有时会遇到以下问题:

Error: listen EADDRINUSE: address already in use :::3000

完整的错误信息:

Error: listen EADDRINUSE: address already in use :::3000
    at Server.setupListenHandle [as _listen2] (node:net:1380:16)
    at listenInCluster (node:net:1428:12)
    at Server.listen (node:net:1516:7)
    at Function.listen (/Users/goodman/Desktop/Projects/kindacode/api/node_modules/express/lib/application.js:635:24)
    at server (/Users/goodman/Desktop/Projects/kindacode/api/src/index.ts:60:7)
    at bootstrap (/Users/goodman/Desktop/Projects/kindacode/api/src/index.ts:73:3)
    at processTicksAndRejections (node:internal/process/task_queues:96:5) {
  code: 'EADDRINUSE',
  errno: -48,
  syscall: 'listen',
  address: '::',
  port: 3000
}

控制台消息表明我正在尝试使用某个程序正在使用的端口运行我的应用程序。这发生在我的应用程序崩溃后。在幕后,很可能有一个终端窗口隐藏在后台仍在运行应用程序。如果您遇到与我相同的问题,请不要惊慌。下面是解决方案。

解决方案

我们要做的其实很简单:杀死端口上正在运行的进程。执行以下命令:

npx kill-port 3000

如果您需要释放 3000 以外的端口,请在该端口上运行上述命令。也可以一次终止多个端口:

npx kill-port 3000 4000 5000 6000 7000

可以解决此问题以及许多其他问题的另一种解决方案只是重新启动计算机(在这种情况下您甚至不必这样做)。