MongoDB: Error setting TTL index on collection : sessions
As I said in your comment, essentially Express is receiving connections before the session store is fully connected. The solution is to wait for the connection to occur before allowing your application to start listening.
You can avoid this problem by using a callback on MongoStore creation, or passing in an already active connection.
Example using connect-mongo
's Callback
var sessionStore = new MongoStore({ url: 'someConnectionUrl', db: 'audio-drop' }, function(e) { var cookieParser = express.cookieParser('waytoblue'); app.use(cookieParser); app.use(express.session({ store: sessionStore })); app.listen();});
Simple Mongoose Example
var mongoose = require('mongoose');mongoose.connect('localhost', function(e) { // If error connecting if(e) throw e; var sessionStore = new MongoStore({ mongoose_connection: mongoose.connection }), cookieParser = express.cookieParser('waytoblue'); app.use(cookieParser); app.use(express.session({ store: sessionStore })); app.listen();});
angular fullstack example
It´s just to encapsulate all the other stuff inside the
mongoose.connect
callback function
See my server/app.js
/** * Main application file */'use strict';// Set default node environment to developmentprocess.env.NODE_ENV = process.env.NODE_ENV || 'development';var express = require('express');var mongoose = require('mongoose');var config = require('./config/environment');// Connect to databasemongoose.connect(config.mongo.uri, config.mongo.options , function(e){// Populate DB with sample data if(config.seedDB) { require('./config/seed'); }// Setup server var app = express(); var server = require('http').createServer(app); var socketio = require('socket.io')(server, { serveClient: (config.env === 'production') ? false : true, path: '/socket.io-client' }); require('./config/socketio')(socketio); require('./config/express')(app); require('./routes')(app);// Start server server.listen(config.port, config.ip, function () { console.log('Express server listening on %d, in %s mode', config.port, app.get('env')); });// Expose app exports = module.exports = app;});
Hope it helps!!