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

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

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

EADDRINUSE, Address already in use

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

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


当前回答

简单地退出服务器,并将服务器端口3000更改为31000,其工作正常。

其他回答

在Linux上。

给~/.bashrc添加函数:

function killTcpListen () {
  kill -9 $(lsof -sTCP:LISTEN -i:$1 -t)
}

Pull changes: source ~/.bashrc

并使用它:killTcpListen 3000

我还有另一个问题。我已经申报了两次港口。不要再犯那个错误了。

app.listen(port, function () {
  console.log('Example app listening on port')
})

app.listen(3000, function() {
  console.log("Server started on port 3000");
});

而是这样做:

const port = 3000;

app.listen(port, function () {
  console.log('Example app listening on port')
})

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

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

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

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

我在运行win8的笔记本电脑上打出了这个。这工作。

以“管理员”身份运行cmd.exe:

C:\Windows\System32>taskkill /F /IM node.exe
SUCCESS: The process "node.exe" with PID 11008 has been terminated.

使用以下命令检查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