部署Node.js+MongoDB应用至Heroku时遭遇ENOTFOUND错误
querySrv ENOTFOUND错误 错误信息
ErrorCaptureStackTrace(err);
Error: querySrv ENOTFOUND _mongodb._tcp.cluster0-qqlqa.mongodb.net
at QueryReqWrap.onresolve [as oncomplete] (node:internal/dns/callback_resolver:47:19) {
errno: undefined,
code: 'ENOTFOUND',
syscall: 'querySrv',
hostname: '_mongodb._tcp.cluster0-qqlqa.mongodb.net'
}
排查与解决步骤
验证DNS解析能力
在终端执行nslookup _mongodb._tcp.cluster0-qqlqa.mongodb.net或dig _mongodb._tcp.cluster0-qqlqa.mongodb.net SRV,若返回无结果,说明本地DNS无法解析MongoDB Atlas的SRV记录。可切换公共DNS(如1.1.1.1或8.8.8.8)后重试。替换为标准连接字符串
若DNS始终无法解析SRV记录,将MongoDB连接字符串从mongodb+srv://...格式切换为标准非SRV格式:- 登录MongoDB Atlas控制台,进入目标集群的连接选项
- 选择「Connect your application」,切换到「Standard connection string」格式
- 复制生成的
mongodb://...字符串,替换代码中的连接地址,确保填写正确的用户名、密码和数据库名
检查Atlas IP白名单设置
后续解析正常仍报错时,确认Atlas控制台的IP白名单包含当前服务器的公网IP,测试阶段可临时设置为0.0.0.0/0(生产环境需限制具体IP范围)配置网络代理(若适用)
若服务器使用代理,需确保Node.js进程能访问外部DNS服务,可在代码中添加代理配置:process.env.HTTP_PROXY = 'http://your-proxy:port'; process.env.HTTPS_PROXY = 'http://your-proxy:port';
内容的提问来源于stack exchange,提问作者isidroca

