Nodemon 2.0.12保存文件时抛出UnhandledPromiseRejectionWarning如何解决
问题的可能原因
- 核心原因是Windows环境下nodemon重启服务时,旧的Node进程未被正常销毁,仍然占用3000端口,新启动的Express服务尝试监听已被占用的端口时抛出异常,且代码中没有对
app.listen的错误做捕获处理,因此触发未处理的Promise拒绝警告。 - package.json的dev脚本存在笔误:配置的启动命令为
nodemon app.j,缺失JS后缀的s,正确写法应为nodemon app.js,如果通过npm run dev启动项目,该错误也会导致启动失败。 - nodemon 2.0.12版本在Windows系统下存在已知的文件监听与进程重启相关的bug,也可能触发该异常。
对应解决方法
- 为
app.listen添加错误捕获逻辑,避免未处理的Promise异常:
app.listen(PORT, function() { console.log('Server started on port 3000') }).on('error', (err) => { if (err.code === 'EADDRINUSE') { console.log(`端口${PORT}已被占用,尝试关闭占用进程后重试`) } })
- 修正package.json中的dev脚本笔误。
- 可将nodemon升级到最新稳定版,或降级到2.0.7等兼容性更好的旧版本。
- 若临时遇到端口占用问题,可手动执行命令杀死占用3000端口的进程:
- 打开cmd执行
netstat -ano | findstr :3000查询占用端口的PID - 执行
taskkill /PID 对应PID /F强制结束对应进程
- 打开cmd执行
内容的提问来源于stack exchange,提问作者akai
相关产品推荐
相关产品推荐

