将 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 RuleRule Type中选择Port,点击下一步 选择TCPSpecific 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 错误的主要内容,如果未能解决你的问题,请参考以下文章

发出发布请求时出现NodeJS CORS错误

在 docker-compose 中将 mongodb 与 spring-boot 应用程序连接时出现此错误

NodeJS 和 Mongoose:将元素添加到现有的空数组

尝试将 Heroku 连接到 Atlas MongoDB 时出现问题

在 ZEIT 上部署时出现 MongoDB 连接错误

在 Node js 应用程序 + MongoDb 中加载数据时出现错误