Im Moment speichere ich meine Sitzungsdaten im "Speicher", der mit connect (express) geliefert wird. Aber ich möchte/muss das für die Produktion ändern.
Die Anwendung verwendet mongodb und ich habe mongoose installiert, um alle db-Kommunikationen abzuwickeln.
z.B. Verbinden Sie sich nach der Initialisierung meiner App mit der Datenbank:
var mongo = require('mongoose');
mongo.connect('mongodb://localhost/myDb');
mongo.connection.on('open', function () {
app.listen(3000);
}
Ich habe das connect-mongodb-Modul gefunden, weiß aber nicht, wie ich es mit mongoose implementieren soll oder ob es tatsächlich möglich ist.
var mongoStore = require('connect-mongodb');
// ...
app.use(express.session({
secret: 'topsecret',
maxAge: new Date(Date.now() + 3600000),
store: new mongoStore({ db: 'myDb' })
}));
oder muss ich meine db-verbindung ein zweites mal mit dem mongodb-modul direkt definieren?
am Ende verwende ich ein bisschen von jeder Antwort, die zuvor gegeben wurde:
anforderungen:
var express = require('express'),
MongoStore = require('connect-mongo')(express),
mongo = require('mongoose');
conf Objekt:
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'
};
dann kann ich es so konfigurieren:
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);
// ...
});
und verbinden Sie sich mit mongoose ein zweites Mal mit mongodb:
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);
});
Bitte beziehe ... mit ein
app.use(express.cookieParser());
direkt vor
app.use(express.session({
Ansonsten wirft Fehler wie unten,
TypeError: Eigenschaft 'connect.sid' von undefined kann nicht gelesen werden
Es sieht so aus, als könnten Sie connect-mongodb
so einrichten, dass Ihr vorheriger Mongoose-Verbindungscode früher ausgeführt wird:
app.use(express.session({
secret: 'topsecret',
maxAge: new Date(Date.now() + 3600000),
store: new mongoStore({ db: mongoose.connections[0].db })
}));
Für 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
wurde in ein eigenes Modul verschoben. Daher müssen Sie require
und session
verwenden, wenn Sie die MongoStore
konfigurieren.
Daher verwendet connect-mongodb
nicht Mongoose, sondern den node-mongodb-native
-Treiber (i.e .:npm install mongodb
). Mongoose hängt auch von diesem Fahrer ab, also sollte er vorhanden sein.
Wenn Sie den Code direkt betrachten, müssen Sie Ihre DB-Verbindungsinformationen als MongoStore
-Objekt angeben:
store: new mongoStore({ Host: 'session_server', port: 27017, db: 'seesion', collection: 'sessions' })
Normalerweise benötigen Sie dazu ein "config" -Objekt oder eine Variable, die dynamisch geladen werden kann (dev vs test vs prod). Dann ziehen Sie den Host/Port/db/auth von diesem Konfigurationsobjekt ab.
Sie können ein Objekt mit Verbindungsdetails (Host, Benutzername, Passwort usw.) übergeben.
Sie können auch eine Verbindungs-URL wie mongodb: // user: [email protected]/db_name übergeben.
Beide Methoden starten automatisch eine neue Verbindung, unabhängig davon, ob Sie bereits eine Moose-Verbindung haben oder nicht.
Im neuesten Code können Sie ein Handle an eine vorhandene Verbindung übergeben, eine Instanz von mongodb.Db
. Bei mongoose wäre dies mongoose.connection.db
. Dieser Code ist jedoch nicht in einer aktuellen Version enthalten, und als ich ihn ausprobierte, funktionierte er nicht. Wahrscheinlich noch nicht bereit (oder nicht getestet).
Ich bin mir sicher, wenn Sie auf die nächste Version warten, können Sie eine bestehende Moose-Verbindung weiterleiten. In der Zwischenzeit müssen Sie nur zwei Verbindungen akzeptieren, eine von mongoose und eine von connect-mongodb.
Ich habe die Verbindungsinformationen von https://github.com/tedeh/connect-mongodb und ich habe die Handle-Informationen von der Quelle ( relevantes Commit ).
Ich stolpere gerade über mongoose-session
Sehr leicht und funktionierte nahtlos für mich. Von github ...
Installation
npm install mongoose-session
Benutzen
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)
}));