MongoDB连接报MongoServerSelectionError监控连接关闭如何解决
MongoDB连接报错修复方案
问题现象
连接SkyCrypt项目的MongoDB数据库时抛出连接异常,已尝试配置IP白名单后问题仍存在,核心错误信息如下:
MongoServerSelectionError: connection <monitor> to 52.20.9.178:27017 closed at Timeout._onTimeout (C:\Users\PC\Downloads\SkyCrypt-development\SkyCrypt-development\node_modules\mongodb\lib\sdam\topology.js:306:38) at listOnTimeout (node:internal/timers:559:17) at processTimers (node:internal/timers:502:7) { reason: TopologyDescription { type: 'Unknown', servers: Map(1) { 'cluster0-shard-00-00.kx9xv.mongodb.net:27017' => ServerDescription { _hostAddress: HostAddress { isIPv6: false, host: 'cluster0-shard-00-00.kx9xv.mongodb.net', port: 27017 }, address: 'cluster0-shard-00-00.kx9xv.mongodb.net:27017', type: 'Unknown', hosts: [], passives: [], arbiters: [], tags: {}, minWireVersion: 0, maxWireVersion: 0, roundTripTime: -1, lastUpdateTime: 7396352, lastWriteDate: 0, error: MongoNetworkError: connection <monitor> to 52.20.9.178:27017 closed at Connection.onClose (C:\Users\PC\Downloads\SkyCrypt-development\SkyCrypt-development\node_modules\mongodb\lib\cmap\connection.js:138:19) at Socket.<anonymous> (C:\Users\PC\Downloads\SkyCrypt-development\SkyCrypt-development\node_modules\mongodb\lib\cmap\connection.js:65:46) at Socket.emit (node:events:527:28) at TCP.<anonymous> (node:net:709:12) { [Symbol(errorLabels)]: Set(0) {} } } }, stale: false, compatible: true, heartbeatFrequencyMS: 10000, localThresholdMS: 15, logicalSessionTimeoutMinutes: undefined }, code: undefined, [Symbol(errorLabels)]: Set(0) {} }
修复步骤
按以下顺序逐一排查,每步完成后重启项目验证连接状态:
- 补全连接串必填参数:MongoDB Atlas分片集群必须携带完整连接参数,禁止使用单节点地址直连。从Atlas控制台选择适配Node.js 3.0+版本的完整连接串,替换项目配置文件中的
MONGODB_URL值,确保连接串包含ssl=true、authSource=admin、replicaSet对应集群副本集名称、retryWrites=true参数。 - 验证本地端口连通性:打开PowerShell执行命令
Test-NetConnection cluster0-shard-00-00.kx9xv.mongodb.net -Port 27017,如果返回的TcpTestSucceeded为false,说明本地网络拦截了27017出站端口,直接切换手机热点测试排除运营商封禁问题,再检查系统防火墙、杀毒软件是否放行了Node.js进程的27017端口出站权限。 - 校验数据库账号权限:确认使用的账号是Atlas集群「Database Access」模块下创建的数据库账号,而非组织层面的管理账号,账号需绑定对应库的读写权限,若账号密码包含特殊字符,需对密码部分做URL编码后再填入连接串。
- 对齐驱动兼容版本:进入项目根目录执行
npm ls mongodb查看已安装的MongoDB驱动版本,Atlas 5.0及以上版本集群要求驱动版本不低于3.7.0,若版本不符可执行npm install mongodb@4.13.0安装适配SkyCrypt项目的稳定驱动版本,删除node_modules和package-lock.json后重新执行npm install重装全量依赖。 - 确认白名单配置生效:临时测试阶段可添加
0.0.0.0/0规则允许所有IP访问,排除公网IP动态变动导致白名单失效的问题,配置完成后等待1-2分钟待规则同步完成再测试连接。
内容的提问来源于stack exchange,提问作者Fallen Guy
相关产品推荐
相关产品推荐

