node.js + express + mongoDB jemand hat jemals versucht, das Session -Management von Express mit Replikate -Sets zu verwenden
Frage
Ich benutze
- Knoten 0.4.11
- Express 2.4.6
- MongoDB 1.8.3
- Mongoose 2.1.2
- connect-mongoDB 1.0.0
und Versuch, Replikate -Sets mit Authentifizierung zu implementieren.
- Ich möchte eine andere Art von Anwendungsdaten im DB speichern
- Ich möchte Express-Sitzungsdaten im DB speichern
Eine "normale" Verbindung mit Mongoose funktioniert:
mongo.connectSet('mongodb://user:secret@host:27017/test,
mongodb://host:27018,
mongodb://host:27019,
mongodb://host:27020', function (err) {
if (err) {
console.log("could not connect to DB: " + err);
}
});
Aber wie kann das Sitzungsmanagement zum Laufen bringen?!
app.use(express.session({
cookie: {maxAge: 60000 * 20}, // 20 minutes
secret: 'foo',
store: new MongoStore({
host: 'host',
port: [27017, 27018, 27019, 27020],
dbname: 'test',
rs_name: 'rstest',
username: 'user',
password: 'secret'
})
}));
das funktioniert nicht :(
Ist das eigentlich möglich? Oder sollte ich einen anderen MongoDB verwenden, um die Sitzungsdaten zu speichern?
Lösung
Sind Sie sicher, dass Sie Connect-MongoDB und nicht Connect-Mongo verwenden?
Ich sehe nicht, wo diese Parameter mit Connect-MongoDB verwendet werden können.
Geben Sie die Verbindungseinstellungen nicht weiter. Connect-mongoDB kann stattdessen eine direkte DB-Variable annehmen, was eine Instanz von MongoDB.db ist.
Das bedeutet, dass Sie dieselbe Verbindung verwenden können, die Mongoose verwendet, anstatt Connect-mongoDB nur für Sitzungen eine neue Verbindung herzustellen.
Für Mongoose befindet sich die MongoDB.DB -Instanz bei mongoose.connection.db.
Verwenden Sie also Ihren Code als Beispiel (Annahme mongo
ist Ihr Mongoose -Objekt):
app.use(express.session({
cookie: {maxAge: 60000 * 20}, // 20 minutes
secret: 'foo',
store: new MongoStore({db: mongo.connection.db})
}));