nodejs/mongoose:连接到使用副本集的DB
-
22-10-2019 - |
题
我已经在两个单独的服务器上安装了MongoDB(1.8.3),并将它们设置为使用“副本集”,如下所示: http://www.mongodb.org/display/docs/replica+set+tutorial
到目前为止,一切看起来都不错:一台服务器被识别为主要服务,一台服务器是辅助服务(当我通过命令行访问它们时)。
问题是我无法使用Node.js(0.4.10)和Mongoose(2.1.0)连接到DB:
var mongo = require('mongoose');
mongo.connectSet('mongodb://host/dbname,mongodb://host2/dbname');
我总是收到以下错误消息:
TypeError: Cannot read property 'reconnectWait' of undefined
at new <anonymous> (/var/www/node/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connections/repl_set_servers.js:23:31)
at NativeConnection.doOpenSet (/var/www/node/node_modules/mongoose/lib/drivers/node-mongodb-native/connection.js:80:18)
at NativeConnection.openSet (/var/www/node/node_modules/mongoose/lib/connection.js:252:8)
at Mongoose.connectSet (/var/www/node/node_modules/mongoose/lib/index.js:116:27)
...
绕过一些搜索,在某处找到了一篇文章,说我还必须提供副本集的名称 - 因此我尝试了一下:
mongo.connectSet('mongodb://host/dbname,mongodb://host2/dbname', rs_name:"name_replicaset"});
我在这里做错了什么...?!
解决方案
好,在 https://github.com/christkv/node-mongodb-native 模块。现在已修复,但尚未推到NPM。因此,对于所有遇到相同错误的人,这就是解决方案:
https://github.com/christkv/node-mongodb-native/pull/340
之后,你可以说
var mongo = require('mongoose');
mongo.connectSet('mongodb://host:27018/testdb, host2:27017/testdb, host3:27019/testdb', function (err) {
if (err) {
console.log("could not connect to DB: " + err);
}
});
mongo.connection.on('open', function () {
console.log("mongodb connection open");
}
不隶属于 StackOverflow