Mongoose连接MongoDB时控制台无连接状态提示问题
问题根因
你的连接回调逻辑本身没有语法问题,运行后没有任何输出,基本是以下几个原因导致的:
- 数据库连接代码未被Node运行时加载:如果你把这段Mongoose连接代码写在了独立的文件中,但是项目启动入口文件(通常是
app.js/server.js)没有引入该文件,这段代码根本不会被执行,自然不会触发任何打印逻辑。 - 连接流程被提前中断:如果在调用
mongoose.connect之后,代码里立刻执行了process.exit()这类强制退出进程的操作,异步的数据库连接流程会被直接终止,.then()和.catch()的回调都没有机会执行。 - 占位符未替换:连接字符串里的
<username>、<password>是示例占位符,如果你没有替换成自己MongoDB Atlas的真实账号密码,连接会一直处于pending状态或者直接抛出未捕获错误,未打印错误详情的情况下看不到任何提示。
修复方案
按以下步骤逐一排查修复即可:
- 确认连接代码被正确引入
如果你把连接逻辑单独存放在比如db.js文件中,一定要在项目入口文件的最顶部添加引入语句:
// 路径替换成你自己存放连接代码的文件相对路径 require('./db')
确保启动项目时,这段连接逻辑会被第一时间加载执行。
- 补全连接凭证并打印错误详情
替换连接串里的账号密码占位符,同时给catch回调加上错误参数,方便定位具体问题,修改后的代码如下:
const mongoose = require('mongoose'); // 注意替换<username>和<password>为真实的数据库用户名、密码,不要保留尖括号 // 密码如果包含@、#、/这类特殊字符,需要先做URL编码再填入 mongoose.connect('mongodb+srv://<username>:<password>@cluster0.8nytedk.mongodb.net/?retryWrites=true&w=majority', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('Connexion à MongoDB réussie !')) .catch((err) => { console.log('Connexion à MongoDB échouée !'); // 打印具体错误信息,方便排查是白名单问题、认证问题还是网络问题 console.error('连接错误详情:', err); });
*补充说明:Mongoose 6.0及以上版本中,useNewUrlParser、useUnifiedTopology已经是默认启用的配置,不传这两个参数也不会影响连接。
排查中断逻辑
检查入口文件中,是否在引入连接代码之后立刻写了强制退出进程的代码,如果有需要把这类逻辑移到连接回调执行完成之后再触发。检查Atlas白名单配置
登录你的MongoDB Atlas控制台,确认当前开发环境的公网IP已经被加入数据库的IP访问白名单,未加白名单的连接请求会被Atlas直接拦截,最终会触发连接超时错误,按上一步加了错误打印后就能看到对应的超时提示。
内容的提问来源于stack exchange,提问作者Wendy Someil
相关产品推荐
相关产品推荐

