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

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

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

EADDRINUSE, Address already in use

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

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


当前回答

在terminal/cmd中使用下面的命令来改变端口(npm run dev是node.js的),你可能有其他命令来运行你的应用程序,其中大多数在改变端口时都可以工作,更简单,更快。此外,您可以使用系统中任何空闲的端口号,而不是3002

PORT=3002 npm run dev

大多数情况下,当一个人运行项目时突然或不知情地退出一个,按下control + z,让你退出端口,总是选择control + c,不会从端口退出来运行服务器或项目。

此外,是时候更改代码中的端口号了

server.listen(3002);

其他回答

对于macOS Monterey(12.0):

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

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


macOS Ventura(13.0)及以上用户:

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

ps aux | grep node
kill -9 [PID] (provided by above command)

描述:


Ps将给出进程状态,aux提供a:所有用户进程,u:用户自己的进程,x:所有其他未连接到终端的进程的列表。 管道符号:|将传递ps aux的结果以进行进一步操作。 Grep将从ps aux提供的列表中搜索所提供的字符串(在本例中为节点)。

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

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错误

我也有同样的问题,但我发现这不是恶魔的问题。首先,我使用这个脚本开始我的过程:

{"dev": "nodemon -r dotenv/config app.js"}

应用程序可以正确启动,但只要任何文件改变,nodemon就不能重新启动它。与此同时,应用程序仍在后台继续运行。如果我按Ctrl+C,它退出,但端口3000上没有更多的进程,所以通过端口fuser -k 3000/tcp杀死它没有任何作用。

并且,我在app.js文件中使用。env端口。

const port = process.env.PORT || 3000;

因此,我只将端口值更改为3000,它就工作了。

const port = 3000;

我不得不找到另一种方法来加载.env文件,但这解决了我的问题。希望这能有所帮助。

出现这个问题的原因是:

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