Node.js中使用Mongoose连接MongoDB Atlas时出现querySrv ECONNREFUSED错误求助
兄弟,这个错误我帮好多开发者排查过,先把你遇到的错误贴出来方便对照:
Error: querySrv ECONNREFUSED _mongodb._tcp.cluster0.ucwptzc.mongodb.net
at QueryReqWrap.onresolve [as oncomplete] (node:internal/dns/promises:294:17) {
errno: undefined,
code: 'ECONNREFUSED',
syscall: 'querySrv',
hostname: '_mongodb._tcp.cluster0.ucwptzc.mongodb.net'
}
本质上这是你的机器没法解析MongoDB Atlas的SRV DNS记录,或者网络被限制了,给你几个亲测有效的排查方向,一步步来:
先排查网络环境:如果是在公司、学校这类内网,大概率是防火墙或代理拦截了SRV类型的DNS查询。先换手机热点试试,或者把本地DNS改成公共DNS(比如8.8.8.8或1.1.1.1)再试。也可以在终端跑命令测试DNS解析:
nslookup -type=SRV _mongodb._tcp.cluster0.ucwptzc.mongodb.net,要是返回“server failed”,那肯定是DNS的问题。检查Atlas的IP白名单:别笑,真的好多人栽在这!去MongoDB Atlas控制台,找到你的集群进入「Network Access」页面,看看当前机器的公网IP有没有在白名单里。拿不准的话,先临时把白名单改成
0.0.0.0/0(允许所有IP访问)测试,能连上再把真实IP加回去,记得用完改回来,安全第一。换用非SRV格式的连接字符串:Atlas默认给的是
mongodb+srv://开头的SRV链接,要是DNS解析有问题,直接换传统格式就行。去Atlas控制台的「Connect」→「Connect your application」,把驱动版本选成2.2.12或更早,就能拿到不带srv的链接,格式大概是mongodb://<用户名>:<密码>@cluster0-shard-00-00.ucwptzc.mongodb.net:27017,cluster0-shard-00-01.ucwptzc.mongodb.net:27017,cluster0-shard-00-02.ucwptzc.mongodb.net:27017/?ssl=true&replicaSet=atlas-xxxxxx-shard-0&authSource=admin&retryWrites=true&w=majority,替换原来的链接试试。更新Mongoose和驱动版本:老版本Mongoose可能对新Atlas的SRV支持有bug,在项目根目录跑
npm update mongoose更到最新稳定版,或者指定兼容版本(比如7.x、8.x系列),有时候版本兼容问题一更新就解决了。清除本地DNS缓存:如果之前DNS解析出过问题,本地缓存可能有脏数据。Windows用户在命令行跑
ipconfig /flushdns,Mac用户跑sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder,Linux用户比如Ubuntu跑sudo systemd-resolve --flush-caches,清完再试连接。
要是试完这些还不行,把你的连接代码贴出来(密码记得打码),我再帮你揪问题!




