使用MongoDB 4.x Node驱动经端口转发连接DocumentDB失败如何解决?
问题原因
MongoDB Node.js 4.x驱动相对于3.x版本,默认启用了副本集拓扑自动发现逻辑。你通过本地端口转发连接DocumentDB时,驱动向DocumentDB请求副本集信息后,会拿到DocumentDB集群内部的VPC私有域名,本地环境无法解析这些私有域名寻址到节点,因此会抛出ReplicaSetNoPrimary错误。
解决方案
在连接配置中添加directConnection=true参数,强制驱动仅使用你指定的本地转发地址建立连接,不触发副本集自动发现逻辑。因为你已经关闭了TLS校验,同时需要保留tls=false参数。
有两种配置方式:
- 直接在连接字符串中追加参数
const MongoClient = require('mongodb').MongoClient; // 追加参数后的连接串 const client = new MongoClient('mongodb://xxxx:xxxx@localhost:27017/?directConnection=true&tls=false'); client.connect(function(err) { if (err) { console.log(err); return; } const db = client.db('testdb'); console.log("Connected successfully to server"); client.close(); });
- 在连接选项中传入配置
const client = new MongoClient('mongodb://xxxx:xxxx@localhost:27017', { directConnection: true, tls: false });
注意事项
- 该配置仅适用于本地开发通过端口转发连接DocumentDB的场景,生产环境连接同一VPC内的DocumentDB集群不要添加
directConnection=true参数,否则会丢失副本集故障转移、读写分离等能力。 - 如果你后续恢复TLS校验,需要删除
tls=false参数,同时按要求配置DocumentDB对应的CA证书。
内容的提问来源于stack exchange,提问作者Nicholas Latino
相关产品推荐
相关产品推荐

