Node.js + Express + MongoDB Chiunque abbia mai provato a utilizzare la gestione della sessione di Express con set di replica
Domanda
sto usando
- Nodo 0.4.11
- Express 2.4.6
- MongoDB 1.8.3
- Mongoose 2.1.2
- Connect-MongoDB 1.0.0
e cercando di implementare set di repliche con autenticazione.
- Voglio archiviare diversi tipi di dati applicativi nel DB
- Voglio archiviare i dati di sessione di Express nel DB
Una connessione "normale" con Mongoose funziona:
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);
}
});
Ma come può far funzionare la direzione della sessione?!
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'
})
}));
Questo non funziona :(
È davvero possibile? O dovrei usare un MongoDB diverso per la memorizzazione dei dati della sessione?
Soluzione
Sei sicuro di utilizzare Connect-MongoDB e non Connect-Mongo?
Non vedo dove possano essere utilizzati quei parametri con Connect-Mongodb.
Non passare nelle impostazioni di connessione. Connect-MongoDB può invece assumere una variabile DB diretta, che è un'istanza di MongoDB.DB.
Ciò significa che è possibile utilizzare la stessa connessione utilizzata da Mongoose, invece di avere Connect-MongoDB creare una nuova connessione solo per le sessioni.
Per Mongoose, l'istanza MongoDB.DB è disponibile su Mongoose.connection.db.
Quindi, usando il tuo codice come esempio (supponendo mongo
è il tuo oggetto mongoose):
app.use(express.session({
cookie: {maxAge: 60000 * 20}, // 20 minutes
secret: 'foo',
store: new MongoStore({db: mongo.connection.db})
}));