Frage

Jetzt bin ich der Speicherung meiner session-Daten in den "Speicher", die im Bundle mit connect(express).Aber ich will/zu ändern, das für die Produktion.

Die Anwendung mit mongodb installiert und ich Mungo, um alle db-Kommunikation.

z.B.Eine Verbindung zu der DB nach der Initialisierung meiner app:

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

Ich fand Sie in der connect-mongodb-Modul, aber ich weiß nicht, wie es zu implementieren, mit mongoose, oder ob es tatsächlich möglich?Ich muss hinzufügen, so etwas wie dieses:

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 definieren, meine db-Verbindung ein zweites mal mit der mongodb-Modul direkt?

War es hilfreich?

Lösung

Am Ende verwende ich ein bisschen jede Antwort, die zuvor gegeben wurde:

  • Ich habe von Connect-MongoDB zum Connect-Mongo-Modul gewechselt
  • Ich verwende ein allgemeines Konfus, um meine Konfigurationsdaten zu speichern
  • Es gibt zwei DB -Verbindungen, weil es für mich einfacher zu handhaben ist (vielleicht später geändert, wenn/wenn eine neue Version von Mongoose/Express herauskommt)

Bedarf:

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 schließlich ein zweites Mal mit Mongoose mit MongoDB herstellen:

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

Andere Tipps

Bitte beziehe ... mit ein

app.use(express.cookieParser());

direkt vor

app.use(express.session({

Andernfalls wirft der Fehler wie unten, aus,

TypeError: Eigenschaft 'Connect.sid' von undefined kann nicht lesen

Es sieht so aus, als könntest du das mit dem Setup tun connect-mongodb Unter der Annahme, dass Ihr Mongoose -Verbindungscode oben oben ausgeführt wird:

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

So connect-mongodb Verwendet keine Mongoose, es verwendet die node-mongodb-native Fahrer (dh: npm install mongodb). Mongoose hängt auch von diesem Fahrer ab, daher sollte er vorhanden sein.

Anschauen der Code direkt, Sie müssen Ihre DB -Verbindungsinformationen als Daten bereitstellen MongoStore Objekt:

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

In der Regel möchten Sie ein "Konfigurations" -Objekt oder eine Variable haben, die dynamisch geladen werden können (Dev vs Test vs prod). Anschließend ziehen Sie das Host/Port/dB/auth von diesem Konfigurationsobjekt aus.

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 sein eigenes Modul verschoben, also müssen Sie require es und benutze session Beim Konfigurieren der MongoStore.

Sie übergeben können, ein Objekt von Verbindungsdaten (host, username, password, etc.).

Sie können auch in eine Verbindungs-url wie mongodb://user:pass@host.com/db_name.

Beide dieser Methoden startet automatisch eine neue Verbindung, unabhängig davon, ob Sie bereits oder starten Sie eine Mungo-Verbindung.

In der neusten Codes, die Sie übergeben können, ein Griff zu einer bestehenden Verbindung eine Instanz von mongodb.Db.Mit mongoose, dies wäre mongoose.connection.db.Dieser code jedoch nicht in einer tatsächlichen release, und, wenn ich es versuchte, funktionierte es nicht.Wahrscheinlich nicht bereit verwendet zu werden, die noch (oder ungetestet).

Ich bin sicher, wenn Sie die nächste Version zu warten, Sie werden in der Lage, übergeben in einem bestehenden Mungo-Verbindung.In der Zwischenzeit müssen Sie einfach akzeptieren, dass zwei verbindungen von mongoose und eine von connect-mongodb.

Ich habe die Verbindungsinformationen aus https://github.com/tedeh/connect-mongodb und ich habe die Informationen verarbeiten anzeigen aus dem source - (relevanten commit).

Ich stolpere nur darüber Mongoose-Session

Sehr leicht und arbeitete nahtlos für mich. Von Github ...

Installation

npm install mongoose-session

Verwenden

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)
}));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top