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

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

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

EADDRINUSE, Address already in use

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

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


当前回答

你也可以通过命令行方式:

ps aux | grep node

来获取进程id。

然后:

kill -9 PID

在kill时执行-9会发送SIGKILL(而不是SIGTERM)。 SIGTERM有时会被节点忽略。

其他回答

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

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

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

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

Linux

运行ps并确定节点进程的PID。

然后执行sudo kill PID

窗户

使用tasklist显示正在运行的进程列表:

tasklist /O

然后,像这样(使用tasklist命令获得的PID)杀死节点进程:

taskkill /pid PID

出现这个问题的原因是:

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

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

在我的例子中,这个问题是由NodeJS环境引起的

两种解决方案:

打开任务管理器,关闭所有Nodejs进程(名称:Node.js JavaScript Runtime) 尝试将服务器的端口从3000更改为当前未被使用的其他端口(例如:3111)。