【问题标题】:Error: listen EADDRINUSE: address already in use 3000;错误:监听EADDRINUSE:地址已在使用3000;
【发布时间】:2021-02-26 04:47:09
【问题描述】:

我的根目录中有一个.env 文件,里面有PORT = 3000;

在我的app.js 中,我使用 .env 文件来监听端口 3000

require('dotenv').config();

const express = require('express');
const app = express();
const port = process.env.PORT || 4000;

app.get('/', (req, res) => {
  res.send('Hello World!!!');
});

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

尝试运行文件后,出现以下错误

错误:监听EADDRINUSE:地址已在使用3000;

我在 Mac 上,所以我尝试在终端中使用 sudo lsof -i :3000 并要求我输入密码。

我输入密码并按 Enter,但没有任何反应。

如何消除错误?我相信我的密码是正确的。我今天确实收到了一个巨大的 Mac OS 更新——这会导致一些与密码相关的问题吗?

【问题讨论】:

    标签: node.js express dotenv


    【解决方案1】:

    试试这个命令:

    sudo ps -ef | grep 3000
    

    【讨论】:

    • 我收到 501 20005 19406 0 9:22PM ttys000 0:00.00 grep 4000 从这里我该怎么办?
    • 你需要运行ps -ef,然后在CMD栏下查找你之前运行的进程。我猜它会是节点 ./app.js。找到之后,您需要获取该进程的 PID,然后运行 ​​kill {PID} 这对我有用。或 sudo kill -9 {PID} // 以管理员权限强制杀死。
    【解决方案2】:

    我在 Windows 上使用此命令修复了此 错误

    netstat -ano | findstr :3000. 
    

    在上面输入这个命令后,你会得到这个TCP地址:

      TCP    0.0.0.0:3000           0.0.0.0:0              LISTENING       12356
      TCP    [::]:3000              [::]:0                 LISTENING       12356
    

    然后运行:

    taskkill /PID 12356 /F
    

    例如:

    C:\Users\Desktop\nodejs>netstat -ano | findstr :3000
    
      TCP    0.0.0.0:3000           0.0.0.0:0              LISTENING       12356
      TCP    [::]:3000              [::]:0                 LISTENING       12356
    
    C:\Users\Desktop\nodejs>taskkill /PID 12356 /F
    
    SUCCESS: The process with PID 12356 has been terminated.
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案3】:

    app.js 文件更改为

    const express = require('express');
    const app = express();
    const port = process.env.PORT || 3000;
    
    require('dotenv').config();
    
    app.get('/', (req, res) => {
      res.send('Hello World!!!');
    });
    
    app.listen(port, () => console.log(`Example app listening on port ${port}!`));
    

    解决了问题,但.env 中的PORT 未被读取...

    【讨论】:

    • 文件顶部需要requiredotenv
    • 这样做会给我错误:听 EADDRINUSE
    • 这并不能解决您的错误,但对于使用process.env.PORT 是必要的。我认为您需要的是lsof -i:3000 没有空间
    • 然后,获取 pid 并运行 kill -9 {pid},将 {pid} 替换为返回的 pid
    • 其实空间好像没什么区别,如果@bilash回答返回了一个pid,就干掉那个
    【解决方案4】:

    您可以简单地更改端口号

    从 3000 起 到 3010 什么的

    远离已经使用过的端口

    【讨论】:

      猜你喜欢
      • 2021-02-11
      • 1970-01-01
      • 2020-11-09
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 2020-07-25
      • 2020-10-12
      • 1970-01-01
      相关资源
      最近更新 更多