Domanda

In questo momento sto memorizzare i miei dati di sessione nel "magazzino della memoria", che viene fornito in bundle con connect (Express). Ma voglio / bisogno di cambiare questo per la produzione.

L'applicazione utilizza MongoDB e ho installato mangusta per gestire tutti i db-comunicazioni.

es. Connettersi al DB dopo l'inizializzazione la mia app:

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

Ho trovato il modulo di connessione, MongoDB, ma non so come implementarlo utilizzando mangusta, o se è davvero possibile? Ho bisogno di aggiungere qualcosa di simile:

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

o devo definire la mia connessione db una seconda volta utilizzando direttamente il MongoDB modulo?

È stato utile?

Soluzione

alla fine sto usando un po 'di ogni risposta che è stata data in precedenza:

  • i commutato da Connect-mongodb collegare-mongo modulo
  • sto usando un oggetto generale conf per memorizzare i miei dati di configurazione
  • ci sono due connessioni db perché è più facile da gestire per me (forse cambiato in seguito, se / quando una nuova versione di mangusta / esprimere esce)

requisiti:

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

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

allora posso configurarlo in questo modo:

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

e infine Connetti a MongoDB una seconda volta utilizzando mangusta:

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

Altri suggerimenti

Si prega di includere

app.use(express.cookieParser());

direttamente prima

app.use(express.session({

In caso contrario getta errore come di seguito,

TypeError: Impossibile leggere la proprietà 'connect.sid' di non definito

Sembra che si possa fare questo per impostare connect-mongodb supponendo che il codice di connessione mangusta sopra viene eseguito in precedenza:

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

Quindi connect-mongodb non usa Mongoose, si utilizza il driver node-mongodb-native ( cioè:. npm install mongodb). Mangusta dipende anche questo driver, quindi dovrebbe essere presente.

il codice direttamente , è necessario fornire le informazioni di connessione DB come un oggetto MongoStore:

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

In genere per questo, si vorrà avere qualche oggetto "config" o variabile che può essere caricato in modo dinamico (dev vs prova vs prod). Poi si tira l'host / port / db / auth fuori di tale oggetto config.

Per 4x espresso:

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 è stato spostato proprio modulo lo è, quindi è necessario require e uso session durante la configurazione del MongoStore.

È possibile passare in un oggetto di dettagli di connessione (host, nome utente, password, ecc.).

Si può anche passare in un URL di connessione come mongodb: // utente: pass@host.com/db_name

.

Entrambi questi metodi inizierà automaticamente una nuova connessione, indipendentemente dal fatto che o non si dispone già di o inizieranno una connessione mangusta.

Nel codice più recente, è possibile passare in un manico di una connessione esistente, un'istanza di mongodb.Db. Con mangusta, questo sarebbe mongoose.connection.db. Tuttavia, questo codice non è in un rilascio effettivo, e quando l'ho provato, non ha funzionato. Probabilmente non è pronto per essere ancora utilizzato (o non testata).

Sono sicuro che se si attende per la prossima release, sarete in grado di passare in una connessione mangusta esistente. Nel frattempo avrete solo bisogno di accettare con due collegamenti, uno da mangusta e uno da Connect-MongoDB.

ho ottenuto le informazioni di connessione da https://github.com/tedeh/connect-mongodb e ho avuto le informazioni maniglia di visualizzare la fonte ( rilevanti commettere ).

Ho appena inciampare attraverso mangusta-session

Molto leggero e ha lavorato senza problemi per me. Da github ...

Installazione

npm install mongoose-session

Usa

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)
}));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top