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

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

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

EADDRINUSE, Address already in use

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

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


当前回答

删除项目根目录中未定义的文件(在应用程序崩溃时创建的)

其他回答

通过Cmd打开Windows

1/2。Search => write CMD => open node.js命令提示符


2/2。执行windows命令:taskkill

结束一个或多个任务或流程。

taskkill /f /im node.exe

/f - force结束

/im -要终止的进程的镜像名称。

Node.exe -可执行文件

Windows -手动任务管理器

这个命令相当于在详细信息选项卡下进入任务管理器并选择节点任务(在我看来很整洁)。

结束任务

Visual studio

有时有多个终端/任务(客户端/服务器等)。 选择并按ctrl + c关闭。

我想知道,为什么还没有人提到这种可能性:

如果你用字符串(有意或无意)提供::listen(port),这将不是一个有效的端口号表示,然后它可以在内部转换为端口号-1,然后引擎将尝试连接到那个-1端口,然后产生相同的EADDRINUSE错误,这反过来可能会有点混乱,让你在错误修复搜索的错误方向(hi, me xD)。

因此,在开始检查使用端口的进程之前,调试代码并检查传递给函数的确切内容。

现代Windows (powershell)

当前版本的Windows默认使用Powershell而不是cmd。你可以这样跑:

Get-NetTCPConnection | where Localport -eq 3000 | select Localport,OwningProcess

找出这个应用是什么。

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

sudo lsof -i :3000

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

kill -9 <PID>

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

首先找出正在运行的是什么:

sudo lsof -nP -i4TCP:3000 | grep LISTEN

你会得到这样的东西:

php-fpm 110 root    6u  IPv4 0x110e2ba1cc64b26d      0t0  TCP 127.0.0.1:3000 (LISTEN)
php-fpm 274 _www    0u  IPv4 0x110e2ba1cc64b26d      0t0  TCP 127.0.0.1:3000 (LISTEN)
php-fpm 275 _www    0u  IPv4 0x110e2ba1cc64b26d      0t0  TCP 127.0.0.1:3000 (LISTEN)

然后你可以像下面这样终止进程:

sudo kill 110

然后,您将能够运行而不会得到listen EADDRINUSE:::3000错误