2011-09-08 4 views
2

J'utiliseNode.js + exprimer + MongoDB quelqu'un a déjà essayé d'utiliser la gestion de session express' avec jeux de réplicas

  • noeud 0.4.11
  • expriment 2.4.6
  • mongodb 1.8.3
  • mangouste 2.1.2
  • connexion-mongodb 1.0.0

et essayer de mettre en œuvre replic un ensemble avec authentification.

  1. je veux stocker différents types de données d'application dans le DB
  2. je veux stocker les données de session-express dans le DB

une connexion « normale » avec mangouste travaille:

mongo.connectSet('mongodb://user:[email protected]:27017/test, 
        mongodb://host:27018, 
        mongodb://host:27019, 
        mongodb://host:27020', function (err) { 
    if (err) { 
     console.log("could not connect to DB: " + err); 
    } 
}); 

mais comment faire fonctionner la gestion de session ?!

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' 
      }) 
      })); 

cela ne fonctionne pas :(

est-ce réellement possible? Ou devrais-je utiliser un autre MongoDB pour stocker les données de session?

Répondre

3

Êtes-vous sûr que vous utilisez la connexion-MongoDB et non Connect-mongo?

Je ne vois pas où ces paramètres peuvent être utilisés avec connexion-MongoDB.

ne passent pas dans les paramètres de connexion. con nect-mongodb peut prendre une variable db directe à la place, qui est une instance de mongodb.Db. Cela signifie que vous pouvez utiliser la même connexion que celle utilisée par mongoose, au lieu que connect-mongodb crée une nouvelle connexion uniquement pour les sessions.

Pour mongoose, l'instance de mongodb.Db peut être trouvée sur mongoose.connection.db.

Donc, en utilisant votre code comme un exemple (en supposant mongo est votre objet mangouste):

app.use(express.session({ 
      cookie: {maxAge: 60000 * 20}, // 20 minutes 
      secret: 'foo', 
      store: new MongoStore({db: mongo.connection.db}) 
      })); 
+0

Yep - assez sûr. mais ça marche tout de même. THX. – pkyeck

Questions connexes