You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

npm start启动报EADDRINUSE 5000端口占用 kill-port命令无效

故障原因

listen EADDRINUSE: address already in use :::5000报错的本质是要监听的5000端口已经被其他进程持有,之前执行npx kill-port 5000没有杀掉真正占用端口的进程,所以重启服务依旧报错。
从贴出的代码和运行日志看,还存在额外的代码问题:重复写了两次mongoose.connect调用,属于冗余逻辑,会创建多余的数据库连接,虽然不是端口报错的直接诱因,但需要修复。


排查&解决步骤
  1. 先定位真正占用5000端口的进程,不要盲目执行kill命令,在终端执行带管理员权限的查询命令:
    sudo lsof -i :5000
    
    输入系统密码后会输出所有占用5000端口的进程信息,重点看COMMAND(进程名)和PID(进程ID)两列:
    • 如果进程名是ControlCenter或者AirPlayXPCHelper:这是MacOS系统默认开启的AirPlay接收器服务,属于系统级进程,普通权限的kill命令杀不掉,杀完也会自动重启。两种解决方式二选一:
      • 不改动项目的永久解决方法:打开系统设置→通用→隔空投送与接力,关闭「AirPlay接收器」开关,等待10秒端口就会自动释放。
      • 不改动系统设置的快速验证方法:把服务监听端口改成其他未被占用的端口,比如将代码里的const PORT = process.env.PORT || 5000改为const PORT = process.env.PORT || 5001,前端接口请求地址对应同步修改端口即可。
    • 如果进程名是node:说明是之前启动异常退出的Node服务残留进程,普通权限没杀掉,执行以下命令强制终止:
      sudo kill -9 替换为上一步查到的对应PID数字
      
  2. 修复代码里的冗余逻辑,删掉重复的数据库连接代码,补充端口监听的错误捕获,避免服务无提示崩溃,修正后的服务端入口代码如下:
    import express from "express";
    import bodyParser from "body-parser";
    import mongoose from "mongoose";
    import cors from "cors";
    
    const app = express();
    
    app.use(bodyParser.json({ limit: "30mb", extended: true }));
    app.use(bodyParser.urlencoded({ limit: "30mb", extended: true }));
    app.use(cors());
    
    const CONNECTION_URL = 'mongodb+srv://weiz:123456wz@cluster0.s6fc6.mongodb.net/?retryWrites=true&w=majority';
    const PORT = process.env.PORT || 5000;
    
    // 仅保留一次数据库连接逻辑
    mongoose.connect(CONNECTION_URL, { useNewUrlParser: true, useUnifiedTopology: true })
      .then(() => {
        app.listen(PORT, () => console.log(`Server running on port: ${PORT}`))
        // 显式捕获端口占用错误
        app.on('error', (err) => {
          if (err.code === 'EADDRINUSE') {
            console.error(`Port ${PORT} is already in use, please check and retry.`);
            process.exit(1);
          }
        })
      })
      .catch((error) => console.log(error.message));
    

验证

处理完成后先执行一次lsof -i :5000(如果改了端口就查你改后的端口号),确认没有进程占用后再执行npm start,控制台正常输出服务运行端口的日志即为启动成功。

内容的提问来源于stack exchange,提问作者SquirtleBig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:57:15