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

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

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

EADDRINUSE, Address already in use

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

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


当前回答

Win10, git bash v2.15, node v8.9.1, npm v5.5.1

我有一个包裹。Json脚本启动节点:"start": "node index.js"

无论何时我使用它,不管我是否用ctrl+c杀死它,我都遇到了这个问题。

如果我只是从git bash运行node index.js而不是npm run start并用ctrl+c杀死,我永远不会得到这个错误。

我不知道为什么,但我想这可能会帮助到一些人。

其他回答

节点正在内存中的某个地方运行,并且锁定了该端口。在Windows上,这个问题会发生,像大多数Windows问题一样,通过按CTRL+ALT+DEL和/或重新启动来解决。

出于对表格中所有答案的尊重,我想补充一点。

我发现,当我终止一个节点应用程序错误使用Ctrl + Z,非常下一次当我试图打开它得到相同的错误EADDRINUSE。

当我使用Ctrl + C终止一个节点应用程序时,下一次我打开它时,它没有任何问题。

将端口号更改为错误的端口号可以解决该问题。

这发生在我身上,因为我在我的ubuntu中打开了多个visual studio实例而没有注意到它,其中一个实例中已经运行了xdebug。

使用netstat获取所有节点进程和它们正在使用的端口,然后通过PID杀死你想要的唯一一个

netstat -lntp | grep node

您将获得所有节点进程

tcp6  0      0 :::5744    :::*    LISTEN     3864/node

然后当你得到PID(3864)时,通过PID终止进程

  kill -HUP PID 

现代Windows (powershell)

当前版本的Windows默认使用Powershell而不是cmd。你可以这样跑:

Get-NetTCPConnection | where Localport -eq 3000 | select Localport,OwningProcess

找出这个应用是什么。