【发布时间】:2020-03-03 05:43:43
【问题描述】:
我已经部署了一个 mongodb 副本集,我正在尝试使用节点 js 后端应用程序连接到该副本集。 我的连接代码如下:
mongoose.connect(config.database, {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
useCreateIndex: true,
dbName:"db7_0",
user:'****',
pass:'****'
}).catch(function (err) {
console.log('The connection to the database could not be established. Error details: ', err);
});
'config.database' 是我使用 mongodb 文档整理的连接 URL,如下所示:
database: "mongodb://user:pw@xxx.eu-west-1.compute.amazonaws.com:27017,xxx.eu-west-1.compute.amazonaws.com:27017,xxx.eu-west-1.compute.amazonaws.com:27017/db7_0?replicaSet=rs0"
注意:“user”、“pw”和“xxx”只是我在连接字符串中使用的真实详细信息的占位符。
我的应用程序抛出以下 MongoNetworkError:
The connection to the database could not be established. Error details: MongoTimeoutError: Server selection timed out after 30000 ms
at Timeout._onTimeout (C:\Dev\sc\node_modules\mongoose\node_modules\mongodb\lib\core\sdam\server_selection.js:308:9)
at listOnTimeout (internal/timers.js:549:17)
at processTimers (internal/timers.js:492:7) {
name: 'MongoTimeoutError',
[Symbol(mongoErrorContextSymbol)]: {}
}
Database error MongoTimeoutError: Server selection timed out after 30000 ms
我尝试了许多不同的方法来解决这个问题,例如在连接字符串中指定用户、密码和数据库以及 mongoose.connect 参数,但这没有任何区别。我最初使用的是 Mongoose v5.9.2(现在是 v5.8.2),行为仍然相同。
另外,请注意,在命令提示符下运行以下命令确实有效:
mongo "mongodb://user:pw@xx.xx.xxx.xx:27017/db7_0"
所以我怀疑这可能是一个猫鼬错误,但我正在努力找出问题所在。
【问题讨论】:
-
副本集当前是否有主节点?
-
@Joe 是的。
-
测试
mongo "mongodb://user:pw@xx.xx.xxx.xx:27017/db7_0?replicaSet=rs0" -
这里有很多建议:github.com/Automattic/mongoose/issues/8180。您是否尝试过更新猫鼬?此外,有些人报告说注释掉 useUnifiedTopology 可以解决问题。
-
@Joe 您的建议让我找到了解决方案,谢谢!当我添加 replicaSet=rs0 选项时它不起作用。
标签: node.js mongodb mongoose replicaset