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

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

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

EADDRINUSE, Address already in use

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

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


当前回答

Server.close()需要一段时间来关闭连接,因此我们应该将其作为一个异步调用:

await server.close();

重要的是: 当使用await时,我们必须在封装函数中使用async关键字:

async () => {
  await 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杀死,我永远不会得到这个错误。

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

Linux

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

然后执行sudo kill PID

窗户

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

tasklist /O

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

taskkill /pid PID

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

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

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

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

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

首先,您需要知道哪个进程正在使用端口3000

sudo lsof -i :3000

这将列出该端口上所有的PID监听,一旦你有了PID,你可以用下面的方法终止它:

kill -9 <PID>

其中,将<PID>替换为进程ID或进程ID列表,即前面的命令输出。

出现这个问题的原因是:

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