我有一个简单的服务器运行在node.js使用连接:

var server = require('connect').createServer();
//actions...
server.listen(3000);

在我的代码中,我有实际的处理程序,但这是基本的思想。我一直遇到的问题是

EADDRINUSE, Address already in use

我收到这个错误时再次运行我的应用程序后,它以前崩溃或错误。因为我没有打开一个新的终端实例,所以我用ctr + z关闭了这个进程。

我非常确定我所要做的就是关闭服务器或连接。我尝试在进程中调用server.close()。(“退出”,…);运气不好。


当前回答

Windows用户的UI解决方案:我发现顶部的答案对我不起作用,它们似乎是Mac或Linux用户的命令。我找到了一个简单的解决方案,不需要记住任何命令:打开任务管理器(ctrl+shift+esc)。查看正在运行的后台进程。找到任何Node.js并结束任务。

在我这么做之后,这个问题就消失了。正如在其他答案中所述,它的后台进程仍然在运行,因为之前遇到了一个错误,常规的退出/清理函数没有被调用,所以杀死它们的一种方法是在任务管理器中找到该进程并在那里杀死它。如果你从终端/powerShell运行进程,你通常可以使用ctrl+c来终止它。

其他回答

使用以下命令检查PID,即运行在端口3000上的进程id:

lsof -i tcp:3000

它将输出如下内容:

COMMAND  PID   USER   FD   TYPE  DEVICE  SIZE/OFF NODE NAME
node     5805  xyz    12u  IPv6  63135    0t0     TCP  *:3000 (LISTEN)

现在使用以下命令终止进程:

kill -9 5805

一种简单的方法是列出在端口上侦听的所有进程

lsof -i tcp:YOUR_PORT | grep监听

然后你可以杀死他们:

kill -9 {PID}

尝试更改端口号。这对我很管用。 例如,可以将端口号从3000修改为3001。

真的很简单,所有的操作系统..

npx kill-port 3000

尽管您的问题如上所述,但您需要捕获节点退出的不同方式

process.on('uncaughtException', (err, origin) => {
    console.log(err);
});

// insert other handlers.

供你参考,你可以用一个命令sudo fuser -k 3000/tcp来终止进程。这可以用于开发中常用的所有其他端口,如8000、8080或9000。