运行nodemon server时MongoDB连接超时Promise pending报错排查
问题根因
报错由两个核心问题共同导致:
- 启动命令配置错误:执行
nodemon server时,实际加载的入口文件为server.js,但该文件仅定义Express实例,数据库连接、服务启动的逻辑全部写在index.js中,启动入口不对会直接导致逻辑执行异常。 - MongoDB连接失败:代码中Mongo连接参数过时、超时时间设置过短,同时存在连接URI错误、网络不通、IP白名单未配置等可能性,触发
MongoServerSelectionError导致进程崩溃,nodemon进入等待文件变更的状态。
解决步骤
1. 修正启动命令
将终端执行的启动命令从nodemon server替换为:
nodemon index.js
修正后检查nodemon启动日志,启动行应显示为[nodemon] starting 'node index.js',无多余参数。
2. 更新MongoDB连接配置
打开index.js,修改MongoClient.connect的配置参数,移除新版驱动已废弃的配置项,调大连接超时时间避免公网连接超时:
MongoClient.connect( process.env.RESTREVIEWS_DB_URI, { maxPoolSize: 50, connectTimeoutMS: 30000, // 连接超时设置为30秒,适配公网连接场景 // 移除废弃的wtimeoutMS、useNewUrlParser配置,新版MongoDB驱动默认启用对应能力 } ) .catch(err => { console.error("数据库连接失败:", err.message); process.exit(1); }) .then(async client => { app.listen(port, () => { console.log(`Server listening on port ${port}`); }); });
3. 排查MongoDB连接可用性
如果修改配置后仍报连接错误,逐项检查以下配置:
- 确认
.env文件存放在项目根目录(与index.js同层级),文件内RESTREVIEWS_DB_URI值正确,数据库账号、密码、集群地址无拼写错误,配置值两端不要添加多余的引号 - 如果使用MongoDB Atlas云集群,进入集群安全配置页面,将当前客户端的公网IP添加到IP白名单,确认连接使用的数据库账号具备目标库的读写权限
- 临时关闭本地代理、防火墙工具,排除网络拦截导致的连接失败
4. 验证修复结果
重新执行nodemon index.js,配置无误的情况下终端会输出Server listening on port 8000,访问http://localhost:8000/api/v1/restaurants可看到返回的Hello from restaurants.route.js文本,不会再出现应用崩溃提示。
内容的提问来源于stack exchange,提问作者hu234
相关产品推荐
相关产品推荐

