Node.js端口3000已经在使用,但它实际上是n't?

我已经在一个node.js项目上工作了几个星期,它一直工作得很好。通常,我使用npm start来运行我的应用程序,并在localhost上的浏览器中查看它,端口3000。

今天,我在使用npm start时开始得到以下错误:

Server started on port 3000
Port 3000 is already in use

我已经检查了资源监视器,我没有在端口3000上运行其他进程。我为什么会得到这个错误消息?

在我的app.js中,我有以下代码来设置端口…这是错误的吗?它以前工作得很好,所以我不确定我做错了什么。

// Set Port
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function() {
console.log('Server started on port '+app.get('port'));
});

谢谢你的帮助!


编辑:

我已经尝试运行netstat和TCPView来检查哪个进程正在使用该端口,但是没有使用该端口。我也尝试重新启动我的笔记本电脑,但我仍然得到同样的错误。

574389 次浏览

这种情况有时会发生在我身上,使用EADDR。通常有一个终端窗口隐藏在后台,仍在运行应用程序。你可以在终端窗口中用ctrl+C停止进程。

或者,由于copy/pasta =),你可能会多次监听端口。

您可以搜索如何终止该进程。

对于Linux / Mac操作系统,在终端中搜索(sudo) run this:

$ lsof -i tcp:3000
$ kill -9 PID

在Windows上:

netstat -ano | findstr :3000
tskill typeyourPIDhere

在git bash中将tskill改为taskkill

< p >对于windows, 任务管理器肯定会显示正在运行的节点进程。 尝试终止进程,它将解决问题。

有时它会发生,就像@sova提出的这种情况有时发生在我身上,EADDR在使用中。通常有一个终端窗口隐藏在后台,仍在运行应用程序一样,这也适用于我。

它发生了,当你打开终端很长一段时间,是的,你有权利,你必须停止这个过程。但有时它并没有在背景中停止。它会解决你的问题。因为这对我来说很管用。

同时,

sudo lsof -i:<PORT_NO>

当前关闭实例,但无法在后台停止进程。所以有一次,

sudo kill <PID>

可以工作,但是当我们更新代码并保存时,这个问题再次出现,就像Nodemon一样。

所以退出终端就能解决问题。

  killall -9 node

来自谷歌的High Sierra解决方案。

macos的网络设置发生了变化,一些应用程序(包括ping)无法解析localhost。

编辑/etc/hosts似乎是一个解决方案:

< p > cmd: sudo nano /etc/hosts/ 内容127.0.0.1 localhost < / p >

或者简单的(如果你确定/etc/hosts是空的) sudo echo '127.0.0.1 localhost' > /etc/hosts < / p >

我也有同样的问题。 (以下步骤在Windows 10上正常工作):

  1. 打开任务管理器(按Ctrl+Alt+删除)
  2. 选择“进程”选项卡
  3. 搜索“Node.js:服务器端JavaScript”
  4. 选择它并单击“结束任务”按钮

现在你可以运行npm start

希望对你有所帮助。

我看到过同样的事情,尝试了上面所有的建议都没有成功。下面是我解决这个问题的几个步骤: -关闭wifi NPM启动(这应该可以工作) -打开wifi

我不太确定根本问题是什么,但这为我解决了问题。

我已经花了2个小时来找出为什么EADDRINUSE不允许我sart一个应用程序(其他节点快速服务器是可以的)…它在添加后开始工作 lazyConnect:没错, 到数据源配置。< / p >

别问我为什么有用。我不知道。我把这个信息放在这里,只是为了给有同样问题的人。

对于windows用户,您可以使用CurrPorts工具轻松地杀死正在使用的端口

enter image description here

它可能是一个在后台运行的管理进程,netstat没有显示这一点 使用tasklist | grep node找到这个管理进程的PID,然后kill PID

如果你正在使用webstorm,请确保你的默认端口不是3000 从 文件->设置->构建,执行,部署->调试器 这里改变

内置服务器端口

,设置为“63342” 或者看看这个答案 更改WebStorm LiveEdit端口(63342) < / p >

尝试在浏览器中打开localhost。只要在地址栏中输入:localhost:3000

如果应用程序打开了,这意味着你之前的npm run仍然是活动的。现在,如果你正在设计相同的应用程序,或者如果你想运行另一个应用程序,你只需要稍微调整代码(在之前运行的应用程序的index.js中)并(可能会刷新浏览器选项卡)使其崩溃;).....现在在新的应用程序目录中再次运行npm run start。希望这能有所帮助!:) < / p >

你可以打开任务管理器(WINDOWS_KEY+X >任务管理器),你会看到“Node.js:服务器端JavaScript”行。选择它并结束任务....现在应该可以工作了!!

如果不是,将应用程序的.env文件更改为包含port:3002并运行新应用程序。这将允许你在不同的端口上运行两个独立的应用程序。干杯! !

我在Windows上使用Git Bash时遇到了这个问题。我运行npm startnode app.js。在用Ctrl+C终止它之后,并尝试使用npm startnode app.js再次启动服务器,然后我得到这个错误消息。

然而,当我用常规的Windows命令提示符这样做时,它工作得很好。

你可以用另一种方法做。打开任务管理器并找到“node . js:服务器端JavaScript”行。选择并结束任务。现在应该可以了。

谢谢。

杀死所有运行的端口(mac):

killall node
打开任务管理器(按Ctrl+Alt+Del 选择“流程选项卡” 搜索“Node.js:服务器端JavaScript” 选择它并单击“结束任务”按钮

在包中。Json脚本包括:

"start": "nodemon app.js --delay 1500ms"

我相信对我来说,问题是旧端口没有被nodemon及时关闭重新启动。我在使用multer时遇到了这个问题。

对于windows用户,只需在Task中停止Node.js的所有进程 经理< /强> < / p >

希望对大家有所帮助

通过输入命令检查在同一端口上运行的任何进程:

sudo ps -ef

您可以找到在各个节点端口上运行的进程,然后通过

kill -9 <node id>

如果问题仍然存在,那么就杀死所有节点

killall node

服务器或应用程序的listen()方法可能添加在2个地方。 中搜索listen()方法用于应用程序启动 这就是为什么它作为服务器从端口XXXX开始返回,并且端口XXXX已经在使用消息并排出现

在linux中很简单

  • 打开终端
  • 进程的空闲端口 -> kill $(lsof -t -i:$port)
  • . sh

如果只关闭一个端口,执行该命令即可。 kill -9 $(lsof -t -i:3000) < / p >

pkillkill之间的区别是某人处理粘土。在kill中,你应用一个过滤器。你只要停你想停的端口。

pkill命令关闭所有节点进程。 pkill -9 node < / p >

使用pkill可以避免在开发过程中偶尔发生的内存泄漏。如果有一个以上的节点,它会杀死所有的节点。

package.json中脚本的使用也被举例说明。

"scripts": {
"server:start": "cd server && yarn start",
"server:restart": "cd server && yarn restart",
"frontend:start": "cd frontend && yarn start",
"frontend:restart": "kill -9 $(lsof -t -i:4200) && yarn start:frontend"
},
"scripts": {
"start": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts",
"restart": "pkill -9 node && start",
"kill": "pkill -9 node"
},

终止拥有端口3000的进程

首先,让我们看看如何终止打开端口的进程。

使用lsof命令,我们可以检索具有给定端口的PID:

$ lsof -i :3000 -t
12345

然后我们可以通过这样做来终止这个进程:

$ kill 12345

让我们把它变成一行代码:

lsof -i 3000 -t | xargs kill

如果你使用环境变量来设置服务器端口,我们可以指定它,而不是硬编码我们的值:

lsof -i ${PORT} -t | xargs kill

最后,如果没有设置环境变量,我们可以默认端口3000:

lsof -i ${PORT:-3000} -t | xargs kill

没有恶魔来执行钩子

Nodemon允许你通过Nodemon设置事件钩子。Json配置文件:

{
"events": {
"crash": "sh -c 'lsof -i :${PORT:-3000} -t | xargs kill'"
}
}

这将导致nodemon在应用程序崩溃时执行sh -c 'lsof -i:${PORT:-3000} -t | xargs kill命令,从而杀死它所生成的保持端口打开的子进程。

或者你可以试试这个

fuser -k PORT-NO/tcp

例如:

fuser -k 3000/tcp

你也可以试试这个

fuser -n tcp -k PORT-NO

例如:

fuser -n tcp -k 3000
我在NodeJS上使用nodemon的快速服务器。 我得到以下消息,它似乎是一个错误:

$ node ./bin/www
Port 3000 is already in use

有一个通用的解决方案,如果您终止所有节点服务器连接,则可以在包中添加此代码。json文件:

"scripts": {
"start": "node ./bin/www",
"stop": "taskkill -f -im node.exe"
},

此外,我还找到了几个解决方案,windows命令和bash在win10 x64。

我所有的笔记都在这里:


#终止所有NodeJS服务器连接

$ taskkill -f -im node.exe
SUCCESS: The process "node.exe" with PID 14380 has been terminated.
SUCCESS: The process "node.exe" with PID 18364 has been terminated.
SUCCESS: The process "node.exe" with PID 18656 has been terminated.

#示例:打开Windows任务管理器,查看Windows上的“node.exe”PID编号

>> Command Line
$ netstat /?
$ netstat -a -n -o
$ netstat -ano

#根据端口号杀死Windows进程(示例)

为帮助< em >: < / em >

$ taskkill /?
$ tskill /?

代码1:< em > < / em >

$ taskkill -pid 14228
ERROR: The process with PID 14228 could not be terminated.
Reason: This process can only be terminated forcefully (with /F option).

代码2:< em > < / em >

$ taskkill -f -pid 14228
SUCCESS: The process with PID 14228 has been terminated.

代码3:< em > < / em >

$ tskill 14228

#查看特定端口的命令行

在cmd:

$ netstat -ano | find "14228"

在bash中:

$ netstat -ano | grep "14228" or $ netstat -ano | grep 14228

使用tasklist命令找到node.exe

在cmd:

$ tasklist | find "node"

在bash中:

$ tasklist | grep node
$ tasklist | grep node.exe
node.exe                     14228 Console                    2     48,156 K
node.exe                     15236 Console                    2     24,776 K
node.exe                     19364 Console                    2     24,428 K
在我的情况下,我刚刚开始使用VS Code,并遵循了使用Sequelize的教程。 最后,我有一个bin/www文件,其中有listen()。 我不知道这一点,我通过运行节点app.js来运行我的应用程序,当它不起作用时,我用.listen()(这工作得很好)添加了快速服务器的东西。< / p >

但是当开始使用nodemon和VSCode时,它被指向bin/www,这需要我的app.js。

长话短说,我已经添加了.listen()到我的app.js,并在我不应该添加并运行bin/www时直接运行app.js。

在ubuntu中,首先通过使用端口号:Sudo lsof -i:3000捕获进程,然后使用kill命令杀死进程,例如,如果进程PID为4493,则使用命令:4493年杀,对于mac或windows,请查找相关命令

enter image description here

也许你可以拿这个作参考。这个命令行可以终止在给定端口上运行的进程。

npx kill-port 3000

enter image description here


杀死多个端口。

npx kill-port 3000 8080 4200

在运行nodemon之前,请先启动mongod。您永远不会得到这个错误。

我也遇到了同样的问题。最好的解决方法是(窗口):

  1. 进入任务管理器

  2. 滚动查找名为。 Node.js:服务器端JavaScript 新增图片供参考 < / p >

  3. 结束这个特定的任务。

这就对了! 现在执行npm开始,它将像以前一样工作!< / p >

我已经解决了这个问题,因为MongoDB或有另一个应用程序,你之前在这个端口上运行它, 为了解决这个问题,从任务管理器中关闭进程,

.

.

.

.

这很简单。你可以用2个简单的步骤来修复它。

  1. 检查您的环境变量是否有名称为“port”的键/条目。
  2. 如果发现,删除该条目或将其重命名为其他内容。

结果是其他程序在使用这个变量。通常当你启动react-scripts时,它会寻找一个标题为PORT的环境变量。

今天我在Windows上就遇到了这种情况。我重新启动了我的计算机,并检查了端口3000上没有任何东西,它不是。

我试着用3001,3005也有同样的效果。

最后我搬到了8881,现在能用了。

对我来说唯一改变的是安装windows更新和更新源地图资源管理器。因为这也发生在其他应用程序,它要么与网络风暴或窗口。我猜端口可能被锁定了,但88XX范围内的端口没有。

你可以使用kill-port。首先,关闭现有端口,然后创建服务器并监听。

const kill = require('kill-port')


kill(port, 'tcp')
.then((d) => {
/**
* Create HTTP server.
*/
server = http.createServer(app);


server.listen(port, () => {
console.log(`api running on port:${port}`);
});
})
.catch((e) => {
console.error(e);
})
 killall -9 node

当你在远程开发时,上面的命令可以退出vs code ssh连接,并杀死所有可能导致问题的节点进程,特别是如果你在生产中有一些应用程序使用node,有一个更好的方法,使用netstat获取所有节点进程及其所使用的端口,然后通过PID杀死你想要的唯一一个

 netstat -lntp | grep node

您将获得所有节点进程

 tcp6  0      0 :::5744    :::*    LISTEN     3864/node

然后当你得到PID(3864)时,通过PID终止进程

   kill -9 PID

   kill -HUP PID

回复晚了,但可能会有帮助:

在我的例子中,没有任何东西使用端口3000(与OP相同,但所有的答案都是关于杀死使用该端口的进程——这没有帮助)。

然而,在任务管理器中,我们运行的两个node.exe副本,即使我杀死它们,也会重新启动。如果你在任务管理器中右键单击node.exe,你会看到这些进程在哪里运行。对我来说,原来Adobe Creative Cloud打包了自己的node.exe,这给我带来了问题。重命名文件(因为我没有使用云服务)对我来说很有用。

我在这里做了所有的事,但都没用。当我检查端口时,没有显示任何进程。最终成功的是《NoMachine》。我把这个留在这里,希望能有所帮助。

我最近在win10上遇到了一个奇怪的port problem,不能在端口8080上启动服务器进程监听,我把它改成了18080,然后它就工作了,但过了一段时间,同样的问题又出现了。 但是我找不到任何进程使用端口,我已经尝试了currpotsnetstat,它们都不工作,我尝试通过

打开端口
python -m http.server 18080
python -m http.server 18081
python -m http.server 18082
python -m http.server 18083
python -m http.server 18084
...

,大多数人说类似的信息“端口已在使用”; 幸运的是,我找到了原因。< / p >

netsh interface ipv4 show excludedportrange protocol=tcp

可以看到一些端口被排除使用,通过这些端口没有打开和监听。 和< / p >

net stop winnat

大多数排除端口被释放,这些端口可以使用。

这是一个老问题,但似乎没有一个回复者真正读过它。我也遇到过同样的问题,问题是Windows有时会保留端口块并阻止你使用它们。该端口不会通过netstat或任何其他工具显示。你可以在这里阅读:

从本质上讲,你可以告诉Windows离开你的端口:

netsh int ipv4 add excludedportrange tcp startport=3000 numberofports=1 store=persistent

自从我找到解决方案后,我今天就面临着同样的问题。

这个问题是因为即使nodemon重新启动,后台仍有节点服务正在运行。

我已经经历了很多答案,但都带有多个命令。 我为我的案例找到了一个简单的命令

sudo pkill node

这将终止该节点上所有正在运行的进程,你的nodemon将开始正常工作。

当命令中没有列出任何任务时,就会发生这种情况

lsof -i:3000

还是会得到一个错误

Error: listen EADDRINUSE: address already in use 0.0.0.0:3000

一个原因是在Nginx conf.d检查中,没有任何配置在端口3000上监听

确保在hosts文件中配置了localhost

127.0.0.1       localhost

https://github.com/facebook/create-react-app/issues/2843

如果你在同一个端口上多次调用app.listen函数,你会得到这个错误。

你可以检查任何循环的代码

enter image description here

打开命令提示符,首先运行以下命令:

netstat -ano | findstr :7001

然后执行以下命令:

taskkill /PID 2820 /F
今天在我中断了进程并更改了节点版本后发生了这种情况。 为了解决这个问题,我只是重新启动了我的计算机,因为没有显示使用端口的PID

只是想提一个已经给出的答案没有涵盖的问题。它与Hyper-V(和Docker)的“偷”有关。港口:

摘自Docker问题(链接如下):

禁用hyper-v(这需要重新启动几次)

dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

当您完成所有必需的重新启动时,保留您想要的端口,这样hyper-v就不会再保留它

netsh int ipv4 add excludedportrange protocol=tcp startport=3000 numberofports=1

重新启用hyper-V(这需要重新启动几次)

dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

https://github.com/docker/for-win/issues/3171#issuecomment-459205576