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