Question

En ce moment je suis stocker mes données de session dans le « magasin de mémoire », qui est livré avec connexion (express). Mais je veux / dois changer cela pour la production.

L'application utilise MongoDB et je mangouste installé pour gérer toutes les communications db.

par exemple. Connectez-vous à la base de données après l'initialisation mon application:

var mongo = require('mongoose');
mongo.connect('mongodb://localhost/myDb');
mongo.connection.on('open', function () {
  app.listen(3000);
}

J'ai trouvé le module de connexion-MongoDB, mais je ne sais pas comment le mettre en œuvre en utilisant mangouste, ou si elle est réellement possible? Je dois ajouter quelque chose comme ceci:

var mongoStore = require('connect-mongodb');
// ...
app.use(express.session({
  secret: 'topsecret',
  maxAge: new Date(Date.now() + 3600000),
  store: new mongoStore({ db: 'myDb' })
}));

ou dois-je définir ma connexion db une deuxième fois à l'aide du module mongodb directement?

Était-ce utile?

La solution

à la fin j'utilise un peu de chaque réponse qui a été donnée avant:

  • i passe de connexion au module-mongodb connexion-mongo
  • J'utilise un objet général pour stocker mes conf données de configuration
  • il y a deux connexions db car il est plus facile à manipuler pour moi (peut-être changé plus tard, si / quand une nouvelle version de mangouste / express sort)

exigences:

var express = require('express'),
    MongoStore = require('connect-mongo')(express),
    mongo = require('mongoose');

objet conf:

var conf = {
  db: {
    db: 'myDb',
    host: '192.168.1.111',
    port: 6646,  // optional, default: 27017
    username: 'admin', // optional
    password: 'secret', // optional
    collection: 'mySessions' // optional, default: sessions
  },
  secret: '076ee61d63aa10a125ea872411e433b9'
};

alors je peux le configurer comme ceci:

app.configure(function(){
  // ...
  app.use(express.cookieParser());
  app.use(express.session({
    secret: conf.secret,
    maxAge: new Date(Date.now() + 3600000),
    store: new MongoStore(conf.db)
  }));
  // important that this comes after session management
  app.use(app.router);
  // ...
});

et enfin connecter à MongoDB une deuxième fois à l'aide mangouste:

var dbUrl = 'mongodb://';
dbUrl += conf.db.username + ':' + conf.db.password + '@';
dbUrl += conf.db.host + ':' + conf.db.port;
dbUrl += '/' + conf.db.db;
mongo.connect(dbUrl);
mongo.connection.on('open', function () {
  app.listen(3000);
});

Autres conseils

S'il vous plaît inclure

app.use(express.cookieParser());

juste avant

app.use(express.session({

Dans le cas contraire jette l'erreur comme ci-dessous,

TypeError: Impossible de lire la propriété 'connect.sid' undefined

On dirait que vous pouvez faire pour connect-mongodb de configuration en supposant que votre code de connexion mangouste ci-dessus est exécuté plus tôt:

app.use(express.session({
  secret: 'topsecret',
  maxAge: new Date(Date.now() + 3600000),
  store: new mongoStore({ db: mongoose.connections[0].db })
}));

connect-mongodb ne pas utiliser Mongoose, il utilise le pilote node-mongodb-native ( i.e.:. npm install mongodb). Mongoose dépend également de ce pilote, il devrait donc être présent.

le code directement , vous devez fournir vos informations de connexion DB comme un objet MongoStore:

store: new mongoStore({ host: 'session_server', port: 27017, db: 'seesion', collection: 'sessions' })

En général pour cela, vous aurez envie d'avoir un objet ou variable « config » qui peut être chargé dynamiquement (dev vs vs prod essai). Ensuite, vous tirez l'hôte / port / db / auth hors de cet objet config.

Pour express 4x:

var express = require('express'),
    session = require('express-session'),
    MongoStore = require('connect-mongo')(session),
    mongo = require('mongoose');

var conf = {
  db: {
    db: 'myDb',
    host: '192.168.1.111',
    port: 6646,  // optional, default: 27017
    username: 'admin', // optional
    password: 'secret', // optional
    collection: 'mySessions' // optional, default: sessions
  },
  secret: '076ee61d63aa10a125ea872411e433b9'
};

app.configure(function(){
  app.use(express.cookieParser());
  app.use(session({
    secret: conf.secret,
    maxAge: new Date(Date.now() + 3600000),
    store: new MongoStore(conf.db)
  }));
});

var dbUrl = 'mongodb://';
dbUrl += conf.db.username + ':' + conf.db.password + '@';
dbUrl += conf.db.host + ':' + conf.db.port;
dbUrl += '/' + conf.db.db;
mongo.connect(dbUrl);
mongo.connection.on('open', function () {
  app.listen(3000);
});

session a été déplacé propre module de, donc vous devez require et utiliser session lors de la configuration du MongoStore.

Vous pouvez passer un objet de détails de connexion (hôte, nom d'utilisateur, mot de passe, etc.).

Vous pouvez également passer dans une URL de connexion comme MongoDB: // user: pass@host.com/db_name

.

Ces deux méthodes commenceront automatiquement une nouvelle connexion, quel que soit vous avez déjà ou non ou commenceront une connexion mangouste.

Dans le dernier code, vous pouvez passer dans une poignée à une connexion existante, une instance de mongodb.Db. Avec mangouste, ce serait mongoose.connection.db. Cependant, ce code n'est pas dans une version réelle, et quand je l'ai essayé, ça n'a pas marché. Probablement pas prêt à être encore utilisé (ou non testé).

Je suis sûr que si vous attendez la prochaine version, vous serez en mesure de passer à une connexion existante mangouste. Pendant ce temps, vous devrez simplement accepter d'avoir deux connexions, l'une de mangouste et une connexion de-MongoDB.

Je suis les informations de connexion de https://github.com/tedeh/connect-mongodb et je suis les informations de la poignée de visualiser la source ( engager pertinentes).

Je trébuche juste en face mangouste session

Très léger et travaillé en toute transparence pour moi. De github ...

Installation

npm install mongoose-session

Utilisez

var express = require('express');

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/db');

var app = express();

app.use(require('express-session')({
    key: 'session',
    secret: 'SUPER SECRET SECRET',
    store: require('mongoose-session')(mongoose)
}));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top