连接MongoDB Atlas报querySrv ECONNREFUSED,4.0+Node.js驱动连接串失效?
问题原因分析
你遇到的querySrv ECONNREFUSED错误本质是mongodb+srv协议依赖的DNS SRV记录查询失败,和驱动本身版本无关,具体原因如下:
mongodb+srv格式的连接串需要先查询指定域名下的SRV记录,才能获取MongoDB Atlas集群的实际节点地址,才能继续建立连接;而你测试可用的旧版mongodb://连接串已经把所有集群节点地址直接写死在URI中,不需要做SRV查询,所以绕开了DNS层面的问题。- 结合你使用Arch Linux的环境,大概率是本地DNS解析服务的问题:Arch Linux默认带的
systemd-resolved服务部分版本对SRV记录的处理存在兼容性bug,或者你当前使用的运营商DNS、公共DNS服务屏蔽了SRV记录的查询请求。
验证与解决方法
- 先执行以下终端命令验证SRV查询是否正常:
dig _mongodb._tcp.cluster0.2sjva.mongodb.net SRV
如果命令返回空结果、报错,就可以确认是DNS解析的问题。
- 可选择的解决方案:
- 临时测试可以将系统DNS替换为支持SRV查询的公共DNS,比如8.8.8.8、1.1.1.1,修改后清空系统DNS缓存再运行代码测试。
- 如果你用默认的systemd-resolved服务,可以尝试重启服务修复缓存异常:
sudo systemctl restart systemd-resolved。 - 不需要强制使用
srv格式连接串,已经验证可用的旧版标准连接串功能完全一致,生产环境也可以正常使用。
内容的提问来源于stack exchange,提问作者ino
相关产品推荐
相关产品推荐

