node.js + express.js: session handling with mongodb/mongoose node.js + express.js: session handling with mongodb/mongoose mongodb mongodb

node.js + express.js: session handling with mongodb/mongoose


in the end i'm using a bit of every answer that was given before:

  • i switched from connect-mongodb to connect-mongo module
  • i'm using a general conf object to store my configuration data
  • there are two db connections because it's easier to handle for me (maybe changed later on, if/when a new version of mongoose/express comes out)

requirements:

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

conf object:

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

then i can configure it like this:

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

and finally connect to mongodb a second time using mongoose:

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


Please include

app.use(express.cookieParser());

directly before

app.use(express.session({

Otherwise throws error as below,

TypeError: Cannot read property 'connect.sid' of undefined


It looks like you could do this to setup connect-mongodb assuming your mongoose connection code above is run earlier:

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