You need to enable JavaScript to run this app. nodemon重启Node项目时持续出现EADDRINUSE端口占用错误如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

nodemon重启Node项目时持续出现EADDRINUSE端口占用错误如何解决?

问题根因

你遇到的EADDRINUSE错误核心原因是旧进程退出时没有主动释放HTTP服务占用的5000端口,你自己新增的进程退出逻辑存在缺陷,反而干扰了进程正常退出流程:

  1. 没有存储app.listen返回的HTTP服务实例,收到退出信号时直接杀进程,没有先关闭监听端口的服务,导致内核依然持有端口占用状态
  2. 监听的进程信号不全,覆盖了nodemon默认的退出处理逻辑,导致进程无法被正常终止
  3. 旧版本nodemon(你使用的2.0.7)在Ubuntu环境下存在已知的子进程销毁失败问题
解决步骤

1. 修正进程退出逻辑(或者直接删除你自行添加的退出处理代码,nodemon默认即可正常工作)

正确的代码示例如下:

const express = require('express')
const app = express()
const PORT = 5000;

const routes = require('./Settings/routes')

app.use(express.json())

routes(app)

// 存储HTTP服务实例,后续用于关闭释放端口
const server = app.listen(PORT, ()=>
    console.log('Сервер работает на порту ' + PORT)
)


// 如果你确实需要自定义退出逻辑,按以下写法修正
const terminator = function(sig){
        if (typeof sig === "string") {
                console.log('%s: Received %s - terminating sample app ...',
                    new Date(Date.now()), sig);
                // 先关闭HTTP服务释放端口
                server.close(() => {
                    console.log('%s: Node server stopped.', new Date(Date.now()) );
                    process.exit(0)
                })
                // 3秒超时兜底,强制退出
                setTimeout(() => process.exit(1), 3000)
        }
};

// 补全需要监听的所有进程退出信号
const arrayOfSignals = [ 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGQUIT', 'SIGHUP']


arrayOfSignals.forEach(function(element) {
        process.on(element, function() {
                console.log('Ожидаем перезапуск процесса')
                terminator(element)
        });
});

2. 排查nodemon运行配置

  • 不要使用sudo运行nodemon命令,sudo启动的子进程权限更高,普通权限的nodemon无法终止该进程,会导致端口残留占用
  • 检查package.json中nodemon的配置,删除自定义的signal等可能干扰进程退出的参数,使用默认配置测试
  • 升级nodemon到最新版本,修复已知的进程销毁bug:
    npm install nodemon@latest -D
    

3. 临时应急处理

如果运行过程中出现端口残留,执行以下命令强制释放5000端口:

lsof -ti:5000 | xargs kill -9

内容的提问来源于stack exchange,提问作者Александр Пахомов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 13:06:03