如何解决MongoDB Atlas出现的'querySrv ENODATA'连接报错问题
解决Node.js连接MongoDB Atlas报错
querySrv ENODATA方案 报错截图:
1 连接字符串校验
- 不要手动拼接连接串,直接从Atlas控制台复制对应Node.js驱动版本的官方生成连接串
- 确认连接串中的
<password>占位符已经替换为实际数据库用户密码,没有残留尖括号,用户名如果包含特殊字符需要提前做URL编码 - 如果你使用的MongoDB Node.js驱动版本低于3.0,不要使用
srv格式的连接串,换成控制台生成的非SRV标准连接串即可,格式示例:mongodb://<username>:<password>@cluster0-shard-00-00.mongodb.net:27017,cluster0-shard-00-01.mongodb.net:27017,cluster0-shard-00-02.mongodb.net:27017/<dbname>?ssl=true&replicaSet=atlas-xxxxxx-shard-0&authSource=admin&retryWrites=true&w=majority
2 DNS问题排查
- 临时将本地DNS服务器替换为公共DNS,比如谷歌的8.8.8.8、国内的114.114.114.114,刷新DNS缓存后再重试连接
- 可本地运行命令
nslookup -type=SRV _mongodb._tcp.<你的集群前缀>.mongodb.net验证SRV记录解析状态,如果返回为空即可确认是DNS解析故障
3 网络限制排查
- 确认当前网络(公司内网、校园网等)没有屏蔽SRV记录查询,多数内网防火墙会禁用该类查询,可临时切换手机热点或其他公共网络测试
- 确认Atlas控制台的IP白名单已添加你当前的公网IP,也可临时设置为0.0.0.0/0测试连通性,测试完成后及时收回权限避免安全风险
- 检查本地防火墙、杀毒软件是否阻止了Node.js进程访问27015/27017端口
4 代码配置校验
- 新版本Mongoose无需额外添加废弃参数,参考示例代码配置即可:
const mongoose = require('mongoose'); const uri = "你的Atlas官方生成连接串"; mongoose.connect(uri) .then(() => console.log("连接成功")) .catch(err => console.log("连接错误", err));
内容的提问来源于stack exchange,提问作者Kev
相关产品推荐
相关产品推荐


