2014-03-27 4 views
18

처음에는이 오류 메시지가 매우 드물게 나타나기 시작했지만보다 정기적으로 표시되기 시작하여 이제는 4/5 번 응용 프로그램이 실행됩니다.MongoDB : 컬렉션에 TTL 인덱스를 설정하는 중 오류가 발생했습니다.

Mongo와 세션 저장소를 처리하는 중입니다. 세션 데이터가 만료되도록 TTL 인덱스가 사용됩니다.

/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 

가 여기에 몽고 쉘에서 db.version()에 따르면 함께 ​​

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

를 묶어 코드, 난 2.4.9을 실행하는거야 내가 connect-mongo의 버전 0.4.0을 사용하고 있습니다.

이 문제를 겪은 사람들이 많지만 자격증 문제로 해결 된 것으로 보입니다. 내 로컬 몽고는 인증으로 보안되지 않으므로 문제가 될 수 없습니다. 어떤 아이디어?

+4

저는 잠시 동안이 문제를 처리했습니다. 기본적으로 Express는 MongoDB 연결이 실제로 연결되기 전에 sesssion 저장소에 액세스하려고합니다. 몇 분만 주시면 기존 연결을'connect-mongo'와 함께 사용하는 예제를 추가하겠습니다. –

+0

몇 가지 예가 추가되었습니다. 항상 다른 라이브러리의 MongoDB 연결을 사용할 필요는 없습니다. 생성자는 완전히 연결될 때 콜백을 허용합니다. –

답변

25

귀하의 의견에서 말했듯이 본질적으로 Express는 세션 저장소가 완전히 연결되기 전에 연결을 수신하고 있습니다. 해결 방법은 응용 프로그램이 청취를 시작하기 전에 연결이 발생할 때까지 대기하는 것입니다.

MongoStore 생성시 콜백을 사용하거나 이미 활성화 된 연결을 전달하면이 문제를 피할 수 있습니다.

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

간단한 몽구스 예

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

이것은 그냥 재미있는 상황에서 **를 저장했습니다. 필자는 최신 [Generator-Angle-Fullstack] (https://github.com/DaftMonk/generator-angular-manager-style-manager.aspx)에서 절대적으로 빠른 속도로 실행되는 전체 Client/e2e/Server 테스트 스위트를 시작한 후에 만이 오류가 발생하기 시작했습니다. 전체 스택) 평균 스택 앱. 훌륭한 솔루션! – charneykaye

+1

@outrightmental 발전기 각형 풀 스택에서 어떻게 수정 했습니까? – chovy

+0

요요 각형 풀 스택 생성기 –

6

업그레이드 연결 - 몽고의하는 나를 위해 일한 버전 0.8.0을.

+0

에 대한 해결책을 게시했습니다. 제게 적합합니다. 감사. –

+0

도 나를 위해 일했다 – jotadepicas

+0

내가 설치 한 npm 설치 mongo-connect --save' 터미널은 0.6을 설치했다.0 버전의 경우, 왜 npm이 패키지의 하위 버전을 설치하는지 모릅니다. 어쨌든 버전 0.6.0 덕분에 – developer

0

각 fullstack 예를

키우면 그냥

서버를 참조 mongoose.connect 콜백 함수 내에서 다른 모든 물건을 캡슐화

이/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; 

}); 

희망이 도움이 !!

관련 문제