如何解决Node.js中nodemon启动应用时立即崩溃并提示'app crashed - waiting for file changes before starting'的问题?
我之前也碰到过nodemon一启动就崩溃的情况,那种只看到"[nodemon] app crashed - waiting for file changes before starting"提示却看不到具体错误的感觉真的很头疼!咱们一步步来排查和解决:
第一步:先获取真正的崩溃错误信息
nodemon的默认提示太笼统,我们得先看到Node.js应用本身的崩溃日志。最简单的方法是直接用node命令启动应用,跳过nodemon:
node server.js
这会输出应用崩溃的具体原因——比如MongoDB连接失败、模块缺失、语法错误等等,这是排查的关键。
如果还是想通过nodemon看详细日志,可以修改package.json的脚本,添加--verbose参数:
{ "scripts": { "dev": "cross-env NODE_ENV=development nodemon server.js --verbose" } }
常见崩溃原因及解决办法
结合你提供的代码,以下是最可能的几个问题:
1. MongoDB连接失败
你的server.js一开始就调用了connectDB(),如果连接失败,会直接触发process.exit(1)导致应用崩溃。可能的原因:
- 本地MongoDB服务未启动:Windows下可以打开「服务」(Win+R输入
services.msc),找到MongoDB服务并启动;或者在命令行运行mongod启动服务。 - 数据库URL配置错误:检查
dbconfig.js里的database字段,格式是否正确:- 本地MongoDB应该是
mongodb://localhost:27017/你的数据库名 - 如果是MongoDB Atlas远程数据库,要确保URL包含正确的用户名、密码、集群地址,并且IP地址已经加入白名单
- 本地MongoDB应该是
- Mongoose版本不兼容:你代码里用的
useNewUrlParser、useUnifiedTopology、useFindAndModify这些参数,在Mongoose 6.x及以上版本已经被移除了。如果你的Mongoose是新版本,修改connectDB函数:const connectDB = async () => { try { const conn = await mongoose.connect(dbConfig.database); console.log(`MongoDB Connected: ${conn.connection.host}`); } catch (err) { console.error('MongoDB连接失败:', err); process.exit(1); } };
2. 依赖缺失或版本不兼容
检查是否所有用到的依赖都已安装:
npm install express morgan cors mongoose body-parser passport cross-env --save
另外,检查Node.js版本与依赖的兼容性——比如Node.js 18+可能和某些旧版本的Mongoose不兼容,可以尝试升级Mongoose到最新稳定版:
npm install mongoose@latest
3. 端口混淆(你可能踩了这个坑)
你提到修改了3306端口,但你的Node.js应用用的是3000(或环境变量PORT),而3306是MySQL的默认端口,MongoDB的默认端口是27017。如果是MongoDB端口被占用,需要检查27017端口,而不是3306:
netstat -ano | findstr :27017
如果被占用,可以关闭占用进程,或者修改MongoDB的端口配置。
4. cross-env未正确安装
Windows下需要cross-env来正确设置环境变量,如果没安装,会导致NODE_ENV未被正确设置(虽然这不一定直接导致崩溃,但可能影响其他逻辑):
npm install cross-env --save-dev
最后验证
当你解决了具体错误后,再运行npm run dev,应该就能看到应用正常启动,nodemon也会开始监听文件变化了。
内容的提问来源于stack exchange,提问作者pomoworko.com

