En ce moment, je stocke mes données de session dans le "magasin de mémoire" fourni avec connect (express). Mais je veux/dois changer cela pour la production.
L'application utilise mongodb et j'ai installé Mangoose pour gérer toutes les communications de base de données.
par exemple. Connectez-vous à la base de données après l’initialisation de mon application:
var mongo = require('mongoose');
mongo.connect('mongodb://localhost/myDb');
mongo.connection.on('open', function () {
app.listen(3000);
}
J'ai trouvé le module connect-mongodb, mais je ne sais pas comment le mettre en œuvre avec mangouste, ou si c'est réellement possible? J'ai besoin d'ajouter quelque chose comme ça:
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 à la base de données une seconde fois en utilisant directement le module mongodb?
à la fin, j'utilise un peu de chaque réponse donnée auparavant:
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 ça:
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 connectez-vous enfin à mongodb une seconde fois en utilisant 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);
});
Merci d'inclure
app.use(express.cookieParser());
directement avant
app.use(express.session({
Sinon, jette l'erreur comme ci-dessous,
TypeError: Impossible de lire la propriété 'connect.sid' de non définie
Il semblerait que vous puissiez le faire pour configurer connect-mongodb
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 })
}));
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é vers son propre module, vous devez donc require
et utiliser session
lors de la configuration de MongoStore
.
Donc, connect-mongodb
n'utilise pas 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.
En regardant le code directement , vous devez fournir vos informations de connexion à la base de données sous la forme d'un objet MongoStore
:
store: new mongoStore({ Host: 'session_server', port: 27017, db: 'seesion', collection: 'sessions' })
Généralement, vous souhaiterez avoir un objet ou une variable "config" pouvant être chargé dynamiquement (dev vs test vs prod). Ensuite, vous extrayez l'hôte/port/db/auth de cet objet config.
Vous pouvez transmettre un objet contenant les détails de la connexion (hôte, nom d'utilisateur, mot de passe, etc.).
Vous pouvez également transmettre une URL de connexion telle que mongodb: // user: [email protected]/db_name.
Ces deux méthodes vont automatiquement démarrer une nouvelle connexion, que vous ayez ou non déjà une connexion manga.
Dans le dernier code, vous pouvez transmettre un handle à une connexion existante, une instance de mongodb.Db
. Avec mangouste, ce serait mongoose.connection.db
. Cependant, ce code ne fait pas partie d'une version réelle et lorsque je l'ai essayé, cela n'a pas fonctionné. Probablement pas encore prêt à être utilisé (ou non testé).
Je suis sûr que si vous attendez la prochaine version, vous pourrez passer par une connexion existante de mangouste. En attendant, vous devrez simplement accepter d'avoir deux connexions, l'une de mangouste et l'autre de connect-mongodb.
J'ai eu les informations de connexion de https://github.com/tedeh/connect-mongodb et j'ai obtenu les informations de pseudo en visualisant la source ( pertinent commit ).
Je viens de tomber sur mangouste-session
Très léger et parfaitement travaillé pour moi. De github ...
Installation
npm install mongoose-session
Utilisation
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)
}));