Node.js应用连接MongoDB Atlas数据库报错:queryTxt ETIMEOUT求助
解决Mongoose连接MongoDB Atlas时出现的queryTxt ETIMEOUT错误
我之前也碰到过这个一模一样的问题!这个queryTxt ETIMEOUT错误本质上是你的Node.js应用没法解析MongoDB Atlas集群的域名,或者网络连接被阻断了。咱们一步步来排查解决:
先修正连接字符串的格式问题
你给出的连接字符串里有两个小错误:- 数据库名
test后面缺少了?,参数应该跟在?之后,正确的格式是test?retryWrites=true - 把转义后的
&换成普通的&,Node.js里不需要转义这个符号
修正后的连接字符串应该是:
mongoose.connect('mongodb+srv://username:pwd@cluster0.z7ysr.mongodb.net/test?retryWrites=true&w=majority', { useNewUrlParser: true, useUnifiedTopology: true });(记得把
username和pwd换成你Atlas账户的真实用户名和密码)- 数据库名
检查MongoDB Atlas的IP白名单配置
这是最容易踩的坑!Atlas默认只允许你创建集群时的本地IP访问,如果你的IP地址变了(比如换了网络),就会被拦截。
操作步骤:- 登录MongoDB Atlas控制台,找到你的
cluster0集群 - 点击左侧菜单栏的Network Access
- 点击Add IP Address,选择Allow Access From Anywhere(测试用,生产环境别这么做)或者手动添加你当前的公网IP
- 保存设置后,等1-2分钟再尝试连接
- 登录MongoDB Atlas控制台,找到你的
排查网络环境问题
如果你在公司、学校内网或者用了代理,可能防火墙会阻断MongoDB的连接:- 可以先切换到手机热点试试连接,如果能成功,说明是当前网络的限制
- 用命令行测试域名解析:
nslookup cluster0.z7ysr.mongodb.net,如果返回错误,说明本地DNS解析有问题,可以尝试更换DNS服务器(比如谷歌的8.8.8.8) - 要是用了代理,需要在Mongoose连接选项里配置代理参数,或者关闭代理重试
升级Mongoose到稳定版本
过旧的Mongoose版本可能和MongoDB Atlas的新特性不兼容,执行命令升级:npm install mongoose@latest手动指定DNS服务器(备选方案)
如果本地DNS解析确实有问题,可以在连接选项里指定公共DNS服务器,比如:mongoose.connect('mongodb+srv://username:pwd@cluster0.z7ysr.mongodb.net/test?retryWrites=true&w=majority', { useNewUrlParser: true, useUnifiedTopology: true, dnsServer: '8.8.8.8' });
先从连接字符串和IP白名单这两个点入手排查,大概率能解决问题!
内容的提问来源于stack exchange,提问作者nikunjkr
相关产品推荐
相关产品推荐

