将 MongoDB 与 nodejs 连接时出现 ReplicaSetNoPrimary 和 MongoServerSelectionError 错误
Posted
技术标签:
【中文标题】将 MongoDB 与 nodejs 连接时出现 ReplicaSetNoPrimary 和 MongoServerSelectionError 错误【英文标题】:getting ReplicaSetNoPrimary and MongoServerSelectionError error while connecting MongoDB with nodejs 【发布时间】:2020-05-20 15:51:30 【问题描述】:我正在尝试连接到 mongodb,但出现以下错误,请您帮忙
var mongo = require('mongodb').MongoClient;
mongo.connect('mongodb://usernamexyz:passwordxyz@hostmxy-mw-e6-u1238.nam.nsroot.net:47017/sampleDB?replicaSet=NAME_2436&readPreference=primary&authSource=admin&w=1', useNewUrlParser: true, useUnifiedTopology: true )
.then(() => console.log("Mongodb connected"))
.catch(err => console.log(err));
我得到的错误如下
MongoServerSelectionError: connection <monitor> to 155.30.360.129:37017 closed
at Timeout._onTimeout (C:\Fintech\NodeFirstApp\node_modules\mongodb\lib\core\sdam\topology.js:448:30)
at listOnTimeout (internal/timers.js:531:17)
at processTimers (internal/timers.js:475:7)
name: 'MongoServerSelectionError',
reason: TopologyDescription
type: 'ReplicaSetNoPrimary',
setName: null,
maxSetVersion: null,
maxElectionId: null,
servers: Map
'hostmxy-mw-e6-u1238.nam.nsroot.net:47017' => [ServerDescription]
,
stale: false,
compatible: true,
compatibilityError: null,
logicalSessionTimeoutMinutes: null,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
commonWireVersion: null
,
[Symbol(mongoErrorContextSymbol)]:
【问题讨论】:
你能从 Mongo Shell 连接到副本集吗? 【参考方案1】:我也遇到了同样的错误。我正在使用另一个wifi。但是当我将我的笔记本电脑与我之前使用的相同 wifi 连接时,我的 mongodb 再次连接。
【讨论】:
这是作为答案发布的,但并不试图回答这个问题。可能应该是评论。 你在哪里添加的?【参考方案2】:我在连接到 MongoDB 地图集时也遇到了同样的错误。 你必须做以下事情。 1. 允许系统中防火墙的出站端口 27015-27017。 2.更新最新的MongoDB和NodeJs。 3. 将您的系统IP在网络访问下的MongoDB atlas集群中列入白名单。
它对我有用。我希望它也对你有用。
【讨论】:
【参考方案3】:正如 Jay 先生所说,如果您的 IP 地址与您在 Atlas 帐户中注册的地址不同(例如,如果您没有使用静态 IP),也会发生这种情况。
在您的 MongoDB Atlas 帐户中检查“网络访问”并与您当前的 IP 进行比较。
【讨论】:
【参考方案4】:我遇到了同样的问题,但通过简单地更正我的 IP 地址来解决它 使用此网站检查您的 IP 地址 - https://www.whatismyip-address.com/?check
【讨论】:
【参考方案5】:转到您创建集群的 Mongodb 并在 ipwhitelist
下单击编辑 IP 地址按钮,然后选择 Add ccurrent IP address
这对我有用
【讨论】:
经过一个小时的努力试图找出问题所在,这个答案让我摆脱了所有的痛苦。我在一个新的网络上。谢谢。 这很容易忘记。用户每次切换时都必须添加新网络。【参考方案6】:我遇到了防火墙问题,以下是我遵循的步骤:
-
搜索具有高级安全性的 Windows 防火墙
选择
Outbound Rules
选择New Rule
在Rule Type
中选择Port
,点击下一步
选择TCP
和Specific remote ports
并在里面写27015-27017
保存规则
这对我有用:)
【讨论】:
【参考方案7】:将通过单击“添加当前 IP 地址”获得的 IP 列入白名单给了我同样的错误。但是,将显示的 IP 地址列入白名单 https://www.whatismyip.com/、https://whatismyipaddress.com/ 或 https://nord***.com/what-is-my-ip/ 解决了我的问题。
【讨论】:
【参考方案8】:更新“网络访问”对我不起作用。对我有用的是通过“自动生成安全密码”更新“数据库访问”并确保单击“更新用户”以保存新密码!
MongoDB Atlas > 数据库访问 > 完成图片中的 3 个步骤
【讨论】:
以上是关于将 MongoDB 与 nodejs 连接时出现 ReplicaSetNoPrimary 和 MongoServerSelectionError 错误的主要内容,如果未能解决你的问题,请参考以下文章
在 docker-compose 中将 mongodb 与 spring-boot 应用程序连接时出现此错误
NodeJS 和 Mongoose:将元素添加到现有的空数组