如何解决Prisma连接MongoDB Atlas的网络不可达错误?
解决Prisma连接MongoDB Atlas的网络错误及相关问题
一、解决防火墙导致的连接错误(os error 10051)
- 排查本地防火墙:检查Windows Defender防火墙、第三方杀毒软件的防火墙规则,确认是否拦截了Node.js进程的网络出站请求,或是拦截了MongoDB Atlas的IP/端口
- 临时验证:关闭防火墙后重新运行
npm start并调用model.count(),如果恢复正常,说明是防火墙拦截问题,需添加放行规则:- 直接放行你的Node.js项目进程的网络访问权限
- 或者放行MongoDB Atlas对应的IP段和默认端口
27017
- 检查代理设置:如果网络使用了代理,确认
HTTP_PROXY/HTTPS_PROXY等环境变量配置正确,或临时关闭代理测试
二、Prisma使用的端口号
Prisma本身没有固定专属端口,完全依赖你配置的数据库连接字符串中的端口:
- 对于MongoDB Atlas,默认连接端口是
27017 - 查看连接配置:打开
prisma/schema.prisma,找到datasource块中url指向的环境变量(比如DATABASE_URL),如果是srv格式的连接字符串(mongodb+srv://...),会自动解析Atlas的端口,默认仍为27017;如果是普通连接字符串,会明确标注端口(比如mongodb://...:27017/...)
三、MongoDB Atlas的IP地址获取方法
- 命令行解析:
- Windows:打开命令提示符,执行
nslookup -type=SRV _mongodb._tcp.你的集群名.mongodb.net,得到集群主机名后,再执行nslookup 主机名获取对应IP - Linux/macOS:执行
dig _mongodb._tcp.你的集群名.mongodb.net SRV,再对返回的主机名执行dig 主机名 A得到IP
- Windows:打开命令提示符,执行
- Atlas控制台查看:
登录MongoDB Atlas控制台,进入目标集群的「Network Access」页面,点击「Add IP Address」,页面会显示当前集群的入口IP段;或是进入「Connect」页面,查看连接字符串中的主机名后手动解析为IP - Node.js代码临时解析:
const dns = require('dns'); // 替换成你的集群SRV地址 const clusterSrv = '_mongodb._tcp.cluster0.mongodb.net'; dns.resolveSrv(clusterSrv, (err, addresses) => { if (err) throw err; addresses.forEach(addr => { dns.resolve4(addr.name, (err, ips) => { if (err) throw err; console.log(`${addr.name} 对应的IP: ${ips.join(', ')}`); }); }); });
内容的提问来源于stack exchange,提问作者Abdul Manan
相关产品推荐
相关产品推荐

