将 MongoDB 与 nodejs 连接时出现 ReplicaSetNoPrimary 和 MongoServerSelectionError 错误

use*_*202 12 mongoose mongodb node.js mongodb-query

我正在尝试连接到 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));
Run Code Online (Sandbox Code Playgroud)

我得到的错误如下

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)]: {}
}
Run Code Online (Sandbox Code Playgroud)

God*_*dor 9

转到您创建集群的 Mongodb,ipwhitelist然后单击编辑 IP 地址按钮,然后选择Add ccurrent IP address

这对我有用


Ash*_*mar 6

我遇到了防火墙问题,以下是我遵循的步骤:

  1. 搜索具有高级安全性的 Windows 防火墙
  2. 选择Outbound Rules
  3. 选择New Rule
  4. 选择PortRule Type,点击下一步
  5. 选择TCPSpecific remote ports并在其中写入27015-27017
  6. 保存规则这对我有用:)

在此输入图像描述 在此输入图像描述


okh*_*rch 6

我在 mongod 服务器上设置了副本集,以便拥有 oplog 功能,并使用它以编程方式与 golang 客户端同步数据库。它在本地 Windows 服务器上运行良好。

mongod.exe --dbpath $dpath --bind_ip 0.0.0.0 --port $port --replSet rs0
mongo.exe' -port $port --eval 'rs.initiate()'
Run Code Online (Sandbox Code Playgroud)

当我使用 docker 时,它向我显示 ReplicaSetNoPrimary 错误。

docker run --name mongo21 -d -p 27021:27017 mongo  --bind_ip_all  --replSet rs0
docker container exec mongo21 mongosh --eval 'rs.initiate()' 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

我注意到 perl 客户端以及 Robo3 T、mongosh 连接到服务器 localhost:27021 没有问题。mongosh 显示它使用哪个 mongo uri:

mongodb://127.0.0.1:27017/test?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.1.9
Run Code Online (Sandbox Code Playgroud)

我发现我可以在连接之前指定客户端选项:

clientOpts := options.Client().ApplyURI(uri).SetDirect(true)
client, err := mongo.Connect(ctx, clientOpts)
Run Code Online (Sandbox Code Playgroud)

该选项修复了 golang 客户端连接问题。


小智 0

我在连接 MongoDB atlas 时也遇到了同样的错误。你必须做以下事情。1. 在系统防火墙中允许出站端口 27015-27017。2.更新最新的MongoDB和NodeJs。3. 在网络访问下将 MongoDB atlas 集群中的系统 IP 列入白名单。

这对我有用。我希望它也适合你。