node.js mongodb session connect

node.js - MongoDB: Error al establecer el índice TTL en la colección: sesiones



mongodb ttl (3)

Ejemplo de Fullstack angular

Es solo para encapsular todo lo demás dentro de la función de devolución de llamada mongoose.connect

Ver mi servidor / app.js

/** * Main application file */ ''use strict''; // Set default node environment to development process.env.NODE_ENV = process.env.NODE_ENV || ''development''; var express = require(''express''); var mongoose = require(''mongoose''); var config = require(''./config/environment''); // Connect to database mongoose.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; });

¡¡Espero eso ayude!!

Inicialmente, este mensaje de error comenzó a aparecer con poca frecuencia, pero comenzó a aparecer con más frecuencia y ahora aparece 4/5 veces que ejecuto mi aplicación.

Estoy manejando mi tienda de sesiones con Mongo y, como lo entiendo, el índice TTL se usa para hacer que los datos de la sesión caduquen.

/home/dan/dev/audio-wave/node_modules/connect-mongo/lib/connect-mongo.js:161 throw new Error(''Error setting TTL index on collection : '' + s ^ Error: Error setting TTL index on collection : sessions at /home/dan/dev/audio-wave/node_modules/connect-mongo/lib/connect-mongo.js:161:23 at /home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:1404:28 at /home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:1542:30 at /home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:159:22 at commandHandler (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:678:48) at Db._executeQueryCommand (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:1802:12) at Cursor.nextObject (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:729:13) at Cursor.toArray (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/cursor.js:158:10) at Cursor.toArray (/home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/scope.js:10:20) at /home/dan/dev/audio-wave/node_modules/connect-mongo/node_modules/mongodb/lib/mongodb/db.js:1541:65

Aquí está el código que lo une

var sessionStore = new MongoStore({ db: ''audio-drop'' }) , cookieParser = express.cookieParser(''waytoblue'') , SessionSockets = require(''session.socket.io'') , sockets = new SessionSockets(io, sessionStore, cookieParser); app.set(''port'', process.env.PORT || 3000); app.set(''views'', __dirname + ''/views''); app.set(''view engine'', ''ejs''); app.use(express.favicon()); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.static(path.join(__dirname, ''public''))); app.use(express.logger(''dev'')); app.use(cookieParser); app.use(express.session({ store: sessionStore }));

De acuerdo con db.version() del shell Mongo, estoy ejecutando 2.4.9 y estoy usando la versión 0.4.0 de connect-mongo .

Parece que hay un número de personas que han llegado a este problema, pero parece que la mayoría de ellos resolvieron ser problemas de credenciales, mi Mongo local no está protegido con autenticación, por lo que este no puede ser el problema. ¿Algunas ideas?


Actualice a la versión 0.8.0 de connect-mongo que funcionó para mí.


Como dije en su comentario, esencialmente Express está recibiendo conexiones antes de que la sesión de almacenamiento esté completamente conectada. La solución es esperar a que ocurra la conexión antes de permitir que la aplicación comience a escuchar.

Puede evitar este problema utilizando una devolución de llamada en la creación de MongoStore o pasando una conexión ya activa.

Ejemplo usando el callback de connect-mongo

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

Ejemplo de mangosta simple

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