更换网络后无法连接MongoDB,报ETIMEOUT错误求解决方案
解决MongoDB连接超时(queryTxt ETIMEOUT)的方案
1. 核对主机名拼写一致性
从报错信息看,DNS查询的主机名是clusterta.xcndkot.mongodb.net,但你的连接字符串里用的是clusterInventory.xcndkot.mongodb.net,且报错里的clusterIventory还少了一个字母'n'。请:
- 打开MongoDB Atlas控制台,复制集群的官方连接字符串,确保主机名完全匹配
- 修正连接字符串里的拼写错误,避免因域名不匹配导致解析失败
2. 手动测试DNS解析
在终端执行以下命令,验证域名是否能正常解析:
# 测试SRV记录解析 dig clusterInventory.xcndkot.mongodb.net SRV # 测试TXT记录解析 dig clusterInventory.xcndkot.mongodb.net TXT
如果解析仍然超时,可尝试切换到国内公共DNS(如114.114.114.114),或检查当前网络是否屏蔽了DNS查询的53端口
3. 检查网络与白名单设置
- 更新MongoDB Atlas的IP白名单:更换网络后公网IP会变化,必须将当前网络的公网IP添加到控制台的IP白名单中
- 关闭本地防火墙、杀毒软件的网络拦截功能,或暂时禁用代理(若当前网络使用了代理),测试连接
- 确认当前网络允许访问MongoDB的端口(27017)
4. 简化连接配置并升级依赖
- Mongoose 6+版本已默认启用
useNewUrlParser和useUnifiedTopology,无需手动配置,可直接移除 - 升级Mongoose到最新稳定版:
npm install mongoose@latest
- 使用最简代码测试连接:
const mongoose = require('mongoose'); const uri = "mongodb+srv://bryantpirih:<password>@clusterInventory.xcndkot.mongodb.net/?retryWrites=true&w=majority&appName=ClusterTA"; async function connect() { try { await mongoose.connect(uri); console.log("MongoDB Connected"); } catch (err) { console.error(err); } } connect();
5. 切换到非SRV格式连接字符串
若SRV格式始终解析失败,可在MongoDB Atlas控制台复制标准连接字符串(非SRV),格式示例:
mongodb://bryantpirih:<password>@clusterInventory-shard-00-00.xcndkot.mongodb.net:27017,clusterInventory-shard-00-01.xcndkot.mongodb.net:27017,clusterInventory-shard-00-02.xcndkot.mongodb.net:27017/?ssl=true&replicaSet=atlas-xxxxxx-shard-0&authSource=admin&retryWrites=true&w=majority&appName=ClusterTA
内容的提问来源于stack exchange,提问作者Bryant
相关产品推荐
相关产品推荐

