gpt4 book ai didi

node.js - MongoDB 错误不是 master 和 slaveOk=false 在带有 Mongoose 的主 Node 上

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:09 25 4
gpt4 key购买 nike

我正在运行一个复制的 mongoDB,我可以使用 mongo 毫无问题地连接到集合中的主数据库:

bash-4.2$ mongo --port 25023
MongoDB shell version: 3.2.6
rs0:PRIMARY>

但是当像这样使用 Mongoose 时:

mongoose.connect('mongodb://127.0.0.1:25023/XXX', { useNewUrlParser: true });

我得到:

XXX/node_modules/mongoose/lib/utils.js:452       
throw err;
^
MongoError: not master and slaveOk=false
at queryCallback (/XXX/node_modules/mongodb-core/lib/cursor.js:247:25)

建议是这样做的:

mongodb://user:password@host:port,replicaSetHost:replicaSetPort/database?replicaSet=rs-someServer.

但这有点笨拙。有没有办法告诉 mongoose 我们连接的是主服务器而不是从服务器?

第二个问题......即使列出其他主机也没有用:

mongoose.connect('mongodb://localhost:P,S1:P,S2:P/XXX?replicaSet=rs0', { useNewUrlParser: true });

即使我提供了 replicaSet,我仍收到此错误:

(node:13757) UnhandledPromiseRejectionWarning: Unhandled promise rejection  (rejection id: 1): MongoError: seed list contains no mongos proxies, replicaset connections requires the parameter replicaSet to be supplied in the URI or options object, mongodb://server:port/db?replicaSet=name

这就是它变得奇怪的地方:我可以做到这一点。如果我使用这一行:

mongoose.connect('mongodb://127.0.0.1:25023/XXX', { useNewUrlParser: true });

让它失败,然后触摸一个 JS 文件强制重启 NodeJS,然后它似乎开始工作了?

最佳答案

同样的问题,基本上我想连接到副本集中的主 Node (写关注),但我间歇性地连接到辅助 Node (竞争条件)。

解决方案/TLDR;

?replicaSet=test&w=majority 添加到您的 MONGO_URL 连接字符串。


From the documentation...

写关注度高的副本集

以下连接到一个副本集,其写入关注配置为等待复制在大多数数据承载投票成员中成功,超时为两秒。

NOTE

For a replica set, specify the hostname(s) of the mongod instance(s) as listed in the replica set configuration.

mongodb://example1.com,example2.com,example3.com/?replicaSet=test&w=majority&wtimeoutMS=2000

关于node.js - MongoDB 错误不是 master 和 slaveOk=false 在带有 Mongoose 的主 Node 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53875543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com