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

每次保存代码后服务端抛出端口已被占用EADDRINUSE错误如何解决

报错原因

当前使用nodemon实现代码修改后自动重启服务,热重载过程中旧服务进程没有被正常杀死,仍持续占用8800端口,新启动的服务进程尝试绑定同一端口时就会触发EADDRINUSE(地址已被占用)错误。

解决方法

临时应急方案(报错后单次处理)

根据你使用的操作系统执行对应命令,手动杀死占用8800端口的进程:

  • Windows系统:
    1. 打开cmd执行netstat -ano | findstr :8800,查询占用端口的进程PID
    2. 执行taskkill /PID 此处替换为查询到的PID /F,强制杀死目标进程
  • Mac/Linux系统:
    可以直接执行一键杀死占用8800端口进程的命令:lsof -ti:8800 | xargs kill -9

永久修复方案(从根源避免问题)

方案1:修改nodemon启动参数

打开package.json,修改scripts中的test配置,给nodemon添加终止信号参数:

"scripts": {
  "test": "nodemon --signal SIGTERM index.js"
}

该配置会强制nodemon重启服务时,给旧进程发送SIGTERM信号,保证旧进程完全退出、释放端口资源。

方案2:代码中添加端口自动释放逻辑

修改index.js中的端口监听代码,监听进程退出事件主动关闭服务释放端口:

const server = app.listen(8800, () => {
  console.log("Backend server is running!");
});

process.on('SIGTERM', () => {
  server.close(() => {
    console.log('服务已关闭,端口已释放');
  });
});

方案3:升级nodemon版本

旧版本nodemon存在已知的热重载时无法正常杀死旧进程的bug,执行以下命令升级到最新版本即可:
npm i nodemon@latest -D


内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:54:04