NodeJS 如何解决:-listen EADDRINUSE:地址已在使用中-

vybvopom  于 2023-06-29  发布在  Node.js
关注(0)|答案(3)|浏览(172)

当我尝试运行webservice时,如下所示:

const port = 3000;
app.get('/hello', (req, res, next) => {
    res.send('Hello, World!');
});
app.listen(port, () => {
    console.log('listening to port', port);
});

这是第一次,它工作得很好。但是从那时起,当我运行包含上面提到的Web服务的node index.js时,我收到下面发布的错误。
为了解决这个问题,我运行了以下命令:

npx kill-port 3000

但这并没有解决问题。
请让我知道是否有其他方法来解决这个问题。

注意:我尝试使用其他几个端口号,但收到相同的错误消息,错误消息中显示的是新的端口号。
错误

node:events:489
  throw er; // Unhandled 'error' event
  ^
Error: listen EADDRINUSE: address already in use :::3000
y53ybaqx

y53ybaqx1#

从任务管理器停止进程。
end the task

8wtpewkr

8wtpewkr2#

端口3000似乎已被另一个进程使用。
如果您使用Linux作为操作系统:

  • 获取侦听端口的列表
ss -ntlp
# or
netstat -ntlp
  • 专门检查端口3000
netstat -ntlp | grep ':3000'

接下来,使用端口杀死进程(先检查端口)。

kill <PID>
kill -9 <PID>  # if kill does not work

如果您使用的是Windows或macOS,则有一种等效的方法来列出侦听端口并使用所需端口杀死进程。

Windows

netstat -ano | findstr :3000
taskkill /PID <PID> /F

MacOS

lsof -ti:3000
kill <PID>
kill -9 <PID> # if kill does not work
ujv3wf0j

ujv3wf0j3#

正如您提到的,第一次运行正常,然后第二次抛出错误。
它与你停止应用程序的方式有关,如果你执行Ctrl + Z(或Mac上的cmd + Z),应用程序将在终端上停止,但进程不会被杀死。
正确的方法是Ctrl + C(或cmd + C在Mac上),它将发送SIGINT,这将杀死应用程序。

相关问题