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

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

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

EADDRINUSE, Address already in use

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

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


当前回答

我得到这个错误一次,并采取了许多方法在这里。

我的问题是我有两个app.listen(3000);在同一个app.js脚本中调用。第一个app.listen()在第二个抛出错误的地方成功了。

我遇到的另一个帮助我调试的有用命令是sudo fuser -k 3000/tcp,它会杀死你可能启动的任何恶意进程(一些进程可能会重新启动,例如,如果使用forever.js运行,但它对我很有用)。

其他回答

对于像我这样的Visual Studio新手来说

您可能正在其他终端上运行该进程!

在Visual Studio中关闭终端后,终端就消失了。

我手动创建了一个新的,以为之前的已经销毁了。实际上,每次我点击New Terminal时,我实际上是在之前的终端上创建了一个新的终端。

所以我找到了第一个终端然后…瞧,我在那里运行服务器。

现代Windows (powershell)

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

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

找出这个应用是什么。

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

windows用户:打开任务管理器,结束任务的nodejs.exe文件,可以正常工作。

bash$ sudo netstat -ltnp | grep -w ':3000'
 - tcp6    0      0 :::4000      :::*        LISTEN      31157/node      

bash$ kill 31157