2013-04-24 4 views
0

Express와 Connect-Mongo를 사용하여 Node.js/Socket.io 응용 프로그램의 세션을 관리하고 있습니다.
connect-mongo 문서를 살펴본 결과 DB 연결을 초기화하려고했지만 저장소에 아무 것도 저장하려고 할 때마다 저장소 객체는 항상 null이며 충돌이 발생합니다.
여기 내가 사용하고 코드의 조각이다 :connect-mongo와 express로 객체를 널 저장하고

var mongoserver = new mongodb.Server('localhost', mongodb.Connection.DEFAULT_PORT, {safe:true}) ; 
var store ; 
app.use(express.session({ 
secret: 'secret', 
store: new MongoStore({ db: 'test'}, function(){ 
    db = new mongodb.Db('test', mongoserver, { w: 1 }) ; 
    db.open(function(err, db){ 
     if(err){console.log('DB error', err) ;} 

     db.collection('test', function(err, collection) { 
      console.log('Collection...') ; 
     }); 

     db.on("close", function(error){ 
      console.log("Connection to the database was closed!"); 
     }); 
    }); 
}) 
})); 
io.sockets.on('connection', function (socket) { 
store.set('test-sid', {foo:'bar'}, function(err, session) {}) ; 
)}; 

다른 모든 변수 (서버 등을 표현)가 제대로 initalized하는 앱이 나오면, 나는 연결이 허용됩니다 몽고에 콘솔에서 볼 . 어떤 아이디어?

답변

2

"store"변수에 저장소를 저장하고 있지 않습니다. 세션 구성으로 전달되고 명시 적 응용 프로그램 설정으로 설정됩니다.

당신이 저장소를 생성하고 설정으로 추가하기 전에 변수에 할당 할 수 있습니다이 문제를 해결 한 후 세션 설정으로 합격 :

// Create the store 
var store = new MongoStore(...); 

// Pass into session creation 
app.set(expression.session({ 
    store: store 
}); 

// You can now access the store from the variable as you expected 
store.set('test-sid', {foo: 'bar'}, function(err, session) {}); 
+0

내가 바보 뭔가, 감사합니다 알고 있었다! – blackbird