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

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

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

EADDRINUSE, Address already in use

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

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


当前回答

出现这个问题的原因是:

任何一个应用程序都可以在这个端口上运行,比如Skype。 节点可能已经崩溃,端口可能没有被释放。 您可能已经尝试启动多个服务器。为了解决这个问题,可以维护一个布尔值来检查服务器是否已经启动。只有当boolean返回false或undefined时才应该启动;

其他回答

对我来说,这是因为我打开了Eclipse……

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

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

在terminal/cmd中使用下面的命令来改变端口(npm run dev是node.js的),你可能有其他命令来运行你的应用程序,其中大多数在改变端口时都可以工作,更简单,更快。此外,您可以使用系统中任何空闲的端口号,而不是3002

PORT=3002 npm run dev

大多数情况下,当一个人运行项目时突然或不知情地退出一个,按下control + z,让你退出端口,总是选择control + c,不会从端口退出来运行服务器或项目。

此外,是时候更改代码中的端口号了

server.listen(3002);

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

lsof -i tcp:YOUR_PORT | grep监听

然后你可以杀死他们:

kill -9 {PID}

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