NodeJS/Mongoose: Verbindung zu DB, bei dem Replikate -Sets verwendet werden
-
22-10-2019 - |
Frage
Ich habe MongoDB (1,8,3) auf zwei separaten Servern installiert und sie für die Verwendung von "Replikate" wie hier gefunden: http://www.mongodb.org/display/docs/replica+Set+Tutorial
Bisher sieht alles gut aus: Ein Server wird als primär und als sekundär anerkannt (wenn ich über Befehlszeile auf sie zugreife).
Das Problem ist, dass ich mit Node.js (0.4.10) und Mongoose (2.1.0) wie folgt keine Verbindung zum DB herstellen kann:
var mongo = require('mongoose');
mongo.connectSet('mongodb://host/dbname,mongodb://host2/dbname');
Ich erhalte immer die folgende Fehlermeldung:
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)
...
Ich habe ein bisschen herum gesucht und irgendwo einen Beitrag gefunden, in dem ich auch den Namen des Replikate -Sets angeben muss - also habe ich dies stattdessen ausprobiert:
mongo.connectSet('mongodb://host/dbname,mongodb://host2/dbname', rs_name:"name_replicaset"});
Was mache ich hier falsch ...?!
Lösung
Ok, es gab einen Fehler in der https://github.com/christkv/node-mongodb-native Modul. Es ist jetzt repariert, aber noch nicht auf NPM gedrängt. Für alle, die ihr den gleichen Fehler bekommen, ist hier die Lösung:
https://github.com/christkv/node-mongodb-native/pull/340
Danach können Sie einfach sagen
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");
}