Node.js Port 3000已经在使用但实际上并没有?

时间:2016-09-04 22:38:25

标签: javascript node.js npm port

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

36 个答案:

答案 0 :(得分:110)

您可以搜索如何杀死该进程。

对于终端中的 Linux / Mac 操作系统搜索(sudo) run

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

在Windows上:

netstat -ano | findstr :3000
tskill typeyourPIDhere 

在git bash中更改tskill的{​​{1}}

答案 1 :(得分:81)

也许您可以以此为参考。这条命令行可以终止在给定端口上运行的进程。

npx kill-port 3000

enter image description here


杀死多个端口。

npx kill-port 3000 8080 4200

答案 2 :(得分:15)

有时会发生这种情况,因为@sova建议 这有时会发生在我身上,EADDR正在使用中。通常情况下,有一个终端窗口隐藏在仍在运行应用程序的后台。 这也适合我。

碰巧,当你长时间打开终端时,是的,你是对的,你已经停止了这个过程。但有时它并没有停留在后台。 最佳解决方案是关闭终端并重新启动它。 它将解决您的问题。因为我的情况有效。

另外,

sudo lsof -i:<PORT_NO>

关闭当前时间的实例,但无法在后台停止该过程。所以有一次,

sudo kill <PID>

有效,但是当我们更新代码并保存时,再次出现此问题,就像 Nodemon 一样。

因此退出终端将解决问题。

  killall -9 node

答案 3 :(得分:14)

对于Windows, 任务管理器肯定会显示一个节点进程正在运行。 试着杀死这个过程,它会解决问题。

答案 4 :(得分:10)

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

  1. 打开任务管理器(按 Ctrl + Alt + Delete
  2. 选择“流程”标签
  3. 搜索“ Node.js:服务器端JavaScript”
  4. 选择它,然后单击“结束任务”按钮

现在您可以运行npm start

希望它对您有帮助。

答案 5 :(得分:8)

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

  1. 转到任务管理器

  2. 滚动并找到一个名为的任务进程。 Node.js:服务器端JavaScript gitlab

  3. 结束此特定任务。

您去了! 现在, npm start ,它将像以前一样工作!

答案 6 :(得分:5)

 killall -9 node

当您进行远程开发并杀死所有可能导致问题的节点进程时,上述命令可以退出 vs 代码 ssh 连接,特别是如果您在生产中使用 node 有一些应用程序,则有一种更好的方法可以使用 netstat 来做到这一点使用它们正在使用的端口获取所有节点进程,然后通过 PID 杀死您想要的唯一一个

 netstat -lntp | grep node

您将获得所有节点进程

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

然后当您获得 PID (3864) 时,只需通过 PID 杀死进程

 kill -HUP PID 

答案 7 :(得分:3)

我最近在 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
...

, 大多数人说“端口已被使用”的类似信息 幸运的是,我搜索并得到了原因。作者

netsh interface ipv4 show excludedportrange protocol=tcp

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

net stop winnat

大部分排除的端口都被释放了,这些端口就可以使用了。

答案 8 :(得分:3)

有时,EADDR正在使用中。通常,有一个终端窗口隐藏在仍在运行应用程序的后台。您可以在终端窗口中使用ctrl + C停止进程。

或者,由于copy / pasta =),或许您正在多次收听端口

答案 9 :(得分:2)

杀死拥有端口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允许您通过nodemon.json配置文件设置事件挂钩:

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

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

答案 10 :(得分:2)

来自谷歌,为High Sierra提供解决方案。

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

编辑/ etc / hosts似乎是一个修复:

cmd:sudo nano /etc/hosts/ 内容127.0.0.1 localhost

或者只是(如果您确定/ etc / hosts为空) sudo echo '127.0.0.1 localhost' > /etc/hosts

答案 11 :(得分:2)

我见过同样的事情,并尝试了以上所有建议,但均未成功。以下是为我解决此问题的步骤: -关闭wifi -npm启动(应该可以) -打开wifi

我不确定是什么根本问题,但可以为我解决。

答案 12 :(得分:1)

在Linux中简单

  • 打开您的终端机
  • 从进程中释放端口 ->杀死$(lsof -t -i:$ port)

答案 13 :(得分:0)

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

enter image description here

答案 14 :(得分:0)

这可能是在后台运行的管理进程,而netstat并未显示此信息。
使用tasklist | grep node查找此管理进程的PID,然后使用kill PID

答案 15 :(得分:0)

我在这里做了一切,但没有任何效果。当我检查端口时没有显示任何进程。最终奏效的是转向 NoMachine。如果它有帮助,我会把它留在这里。

答案 16 :(得分:0)

迟到的回复,但它可能对某人有所帮助:

在我的情况下,没有使用端口 3000(与 OP 相同,但所有答案都是关于终止使用该端口的进程 - 这无济于事)。

但是,在任务管理器中,我们运行了两个 node.exe 副本,即使我杀死它们也会重新启动。 如果您在任务管理器中右键单击 node.exe,您将看到这些进程正在运行的位置。对我来说,结果是 Adob​​e Creative Cloud 打包了它自己的 node.exe,这给我带来了问题。重命名文件(因为我没有使用云服务)对我有用。

答案 17 :(得分:0)

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

  

内置服务器端口

并将其设置为“ 63342” 或看到这个答案 Change WebStorm LiveEdit Port (63342)

答案 18 :(得分:0)

今天我在Windows上开始发生这种情况。我已经重新启动计算机,并检查端口3000上是否没有任何东西。

我尝试使用3001、3005获得相同的结果。

最后,我搬到了8881,现在可以使用了。

对我来说唯一改变的是安装Windows更新和更新source-map-explorer。因为在其他应用程序中也会发生这种情况,无论是Web Storm还是Windows。我的猜测是端口可能被锁定,但88XX范围内的端口却未被锁定。

答案 19 :(得分:0)

这很简单。您可以通过2个简单的步骤对其进行修复。

  1. 检查环境变量是否存在名称为“ PORT”的键/条目。
  2. 如果找到,则删除该条目或将其重命名为其他名称。

事实证明,其他一些程序正在使用该变量。通常,当您启动react-scripts时,它将查找标题为PORT的环境变量。

答案 20 :(得分:0)

我已经解决了这个问题,因为MongoDB或您之前在此端口上运行过另一个应用程序, 因此要解决它会杀死任务管理器的流程, 或仅将端口号从3000更改为其他任何端口。

答案 21 :(得分:0)

我花了2个小时来找出为什么EADDRINUSE不允许我销售应用程序(其他node-express服务器都可以)的原因...添加后它开始工作 lazyConnect: true, 数据源配置。

不要问我为什么有帮助。我不知道。我将此信息仅用于具有相同问题的人。

答案 22 :(得分:0)

尝试在浏览器中打开本地主机。只需在地址栏中输入:localhost:3000

如果该应用程序打开,则表明您之前的npm run仍处于活动状态。现在,如果您正在设计相同的应用程序,或者您想运行其他应用程序,则只需更改代码并查看效果,只需对代码(在先前运行的应用程序的index.js中)进行一点微调,然后(可能刷新浏览器选项卡)以使其崩溃;).....现在,从新的应用程序目录再次运行npm run start。希望这可以帮助! :)

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



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

答案 23 :(得分:0)

在我的情况下,我刚开始使用VS Code,并遵循了使用Sequelize的教程。 最后,我有一个bin / www文件,其中有listen()。 我对此一无所知,我通过运行node app.js运行我的应用程序,当它不起作用时,我随后使用.listen()添加了Express Server的东西(效果很好)。

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

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

答案 24 :(得分:0)

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

enter image description here

答案 25 :(得分:0)

如果只想关闭一个端口,只需运行此命令。 kill -9 $(lsof -t -i:3000)

pkillkill之间的区别在于有人在处理黏土。要杀死您,请应用过滤器。您只需停止想要的端口即可。

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

使用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"
},

答案 26 :(得分:0)

服务器或应用程序li​​sten()方法可能在两个位置添加。 在应用程序启动中搜索listen()方法 这就是为什么它作为服务器返回时从端口XXXX和端口XXXX启动的消息已并发出现的原因

答案 27 :(得分:0)

  

对于Windows用户,只需在 Task中停止Node.js的所有进程即可   经理

希望这会有所帮助

答案 28 :(得分:0)

在package.json脚本中包括:

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

我认为,对我来说,问题在于nodemon未及时关闭旧端口以进行重新启动。我在使用multer时遇到了这个问题。

答案 29 :(得分:0)

打开任务管理器(按Ctrl + Alt + Del 选择“流程标签” 搜索“ Node.js:服务器端JavaScript” 选择它,然后单击“结束任务”按钮

答案 30 :(得分:0)

我为Mac用户找到了一个简单的解决方案:

killall node

答案 31 :(得分:0)

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

但是,当我使用常规的 Windows命令提示符执行此操作时,它工作正常。

,您可以通过其他方式进行。打开任务管理器,然后找到“ Node.js:服务器端JavaScript ”行。 选择该任务并结束任务。现在应该可以使用了。

谢谢。

答案 32 :(得分:-1)

在运行nodemon之前,请先启动mongod。您将永远不会收到此错误。 :)

答案 33 :(得分:-1)

对于 Mac 用户,请使用活动监视器应用强制关闭该过程。 从该过程中选择 npm ,然后单击 X 按钮以退出或强制退出该过程。

我在更新和重新启动代码编辑器并使用活动监视器修复它时遇到了这个问题

npm process in activity monitor app

答案 34 :(得分:-1)

您可以使用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);
    }) 

答案 35 :(得分:-2)

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

sudo ps -ef

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

杀死该节点。
kill -9 <node id>

如果问题仍然存在,则杀死所有节点

killall node