我已经在一个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来检查哪个进程正在使用该端口,但是没有使用该端口。我也尝试重新启动我的笔记本电脑,但我仍然得到同样的错误。


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

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


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

对于Linux/Mac OS搜索(sudo)在终端中运行:

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

在Windows上:

netstat -ano | findstr :3000
tskill typeyourPIDhere 

在git bash中将tskill更改为taskkill


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


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

它发生了,当你打开终端很长一段时间,是的,你有权利,你必须停止这个过程。但有时它并没有在背景中停止。因此,最好的解决方案是关闭终端,然后重新启动。它会解决你的问题。因为这对我来说很管用。

同时,

sudo lsof -i:<PORT_NO>

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

sudo kill <PID>

工作,但再次当我们更新我们的代码和保存,这个问题再次发生与Nodemon。

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

  killall -9 node

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

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

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

命令:sudo nano /etc/hosts/ 内容127.0.0.1 localhost

或者简单地说(如果你确定/etc/hosts是空的) 必须回显“127.0.0.1 localhost”> /etc/hosts


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

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

现在你可以运行npm start。

希望对你有所帮助。


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

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


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

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


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


它可能是在后台运行的管理进程,netstat没有显示这一点。 使用任务列表| grep节点找到这个管理进程的PID,然后杀死PID


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

内置服务器端口

设置为63342 或者看看这个答案 更改WebStorm LiveEdit端口(63342)


Try opening the localhost in your browser. Just type: localhost:3000 in the address bar. If the app opens-up, it means your previous npm run is still active. Now, you can just make changes to the code and see the effects if you are designing the same app, or if you wanna run another app, just tweak the code (in index.js of previously running app) a little-bit and (probably refresh the browser tab) to make it crash ;)..... Now go run npm run start again from your new app directory. Hope this helps! :)

or

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

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


我在Windows上使用Git Bash时遇到了这个问题。我运行npm start,或者node app.js。在用Ctrl+C终止它之后,并尝试使用npm start或node 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用户,只需简单地停止任务中的所有Node.js进程 经理

希望对大家有所帮助


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

sudo ps -ef

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

kill -9 <node id>

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

killall node

服务器或应用程序的listen()方法可以添加在两个位置。 中搜索listen()方法用于应用程序启动 这就是为什么它返回作为服务器启动端口XXXX和端口XXXX已经在使用消息并排出现


在linux中很简单

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


如果只关闭一个端口,执行此命令即可。 Kill -9 $(lsof -t -i:3000)

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

pkill命令关闭所有节点进程。 Pkill -9节点

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

在包中使用脚本。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

Eg:

fuser -k 3000/tcp

你也可以试试这个

fuser -n tcp -k PORT-NO

Eg:

fuser -n tcp -k 3000

在MAC

kill -9 $(lsof -ti:PORT_NO)

Eg:

kill -9 $(lsof -ti:9229)

我在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进程(示例)

寻求帮助:

$ taskkill /?
$ tskill /?

代码1:

$ 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:

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

代码3:

$ 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()(这工作得很好)添加了快速服务器的东西。

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

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


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


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

npx kill-port 3000


杀死多个端口。

npx kill-port 3000 8080 4200

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


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

进入任务管理器。 滚动并找到名为。 Node.js:服务器端JavaScript 结束这个特定的任务。

好了! 现在执行npm start,它将像以前一样工作!


我已经解决了这个问题,因为MongoDB或有另一个应用程序,你之前在这个端口上运行它, 为了解决这个问题,从任务管理器中关闭进程, 或者将端口的编号从3000更改为任何其他端口。


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

如果有名为“PORT”的键/项,请检查环境变量。 如果发现,删除该条目或将其重命名为其他内容。

结果是其他程序在使用这个变量。通常当你启动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

or

   kill -HUP PID 

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

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

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


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


我最近在win10上遇到了一个奇怪的端口问题,无法在端口8080上启动服务器进程监听,我把它改成了18080,然后它就工作了,但过了一段时间,同样的问题又出现了。 但是我找不到任何进程使用端口,我已经尝试了currpots和netstat,没有一个工作,我尝试了开放端口

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
...

,大多数人说类似的信息“端口已经在使用” 幸运的是,我找到了原因。通过

netsh interface ipv4 show excludedportrange protocol=tcp

可以看出有些端口是排除使用的,通过这些端口没有打开和监听。 并通过

net stop winnat

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


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

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

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

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

这个问题是因为有节点服务正在后台运行,即使没有恶魔重启。

我想过很多答案,但都有多种命令。 这是我为我的案子找到的简单命令

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函数,你会得到这个错误。

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


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

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