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

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

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

EADDRINUSE, Address already in use

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

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


当前回答

真的很简单,所有的操作系统..

npx kill-port 3000

尽管您的问题如上所述,但您需要捕获节点退出的不同方式

process.on('uncaughtException', (err, origin) => {
    console.log(err);
});

// insert other handlers.

其他回答

PowerShell \用户:

任务杀戮 /IM 节点.exe /F

在我的回答中重写@Gerard的评论:

在类unix操作系统上尝试pkill nodejs或pkill node。

这将杀死运行在任何端口上的节点服务器的进程。 为我工作。

对于macOS Monterey(12.0):

苹果公司在macOS Monterey上对AirPlay进行了一些更改。现在,它使用5000和7000端口。如果在项目中使用这些端口,则需要禁用此功能。

系统首选项>共享>取消AirPlay接收器


macOS Ventura(13.0)及以上用户:

系统设置>常规>禁用AirPlay Receiver

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

await server.close();

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

async () => {
  await server.close();
}

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

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

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