我有一个简单的服务器运行在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);

其他回答

在我的例子中,这个问题是由NodeJS环境引起的

两种解决方案:

打开任务管理器,关闭所有Nodejs进程(名称:Node.js JavaScript Runtime) 尝试将服务器的端口从3000更改为当前未被使用的其他端口(例如:3111)。

对于所有来到这个帖子并尝试了所有可能使用无恶魔或永远做到这一点的人。 例如,如果你跑步 端口= 6060 Nodemon 您可能会得到端口6060已被使用的相同错误。

如果是这种情况,如果你真的需要在运行过程中定义port,那么就运行你的项目而不使用nodemon。或者,如果你想坚持使用nodemon,你可以在你的文件中定义port。

对我来说,我现在这样做PORT=6060 node app.js

出现这个问题的原因是:

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

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

sudo lsof -i :3000

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

kill -9 <PID>

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

只杀死使用给定PORT的节点进程。正如其他人提到的,在bash中可以使用kill $(lsof -t -i:PORT)

这里有一个Windows解决方案(有一个方法!): Netstat -bona | findstr "。0:PORT +0.0.0.0:0 +LISTENING" | for /f "令牌=5" %t in ('more') do taskkill /PID:%t /f。你需要一个提升终端(在VSCode中,你需要通过提升来打开自己,因为集成终端不能被提升)。

PS:如果findstr不可用,您可以简单地使用查找和替换空格“+”(非正则模式)