2011-08-11 9 views
0

Express.js 프레임 워크를 사용하여 Node.js 서버에 의해 시작된 '업그레이드'이벤트에서 세션 객체에 액세스하려고합니다. 세션 지원을 올바르게 설정했고 표준 .get .post .put 및 .delete 메소드에서 액세스 할 수 있습니다.Node.js + Express.js (연결) - '업그레이드'이벤트에서 세션 액세스

app.get('/', function(req, res) { 
    req.session.test = 'Hello world'; // Works fine 
    res.render('index'); 
}); 

하지만 지금처럼 서버에서의 '업그레이드'이벤트를 연결하는 경우 :

app.on('upgrade', function(req, socket) { 
    var message = req.session.test; // Doesn't work 
}); 

나는 세션 개체에 액세스 할 수 없습니다. 내가 아는 한 Connect Session 미들웨어는 get/post/put/delete 메소드에 대한 세션만을 연결하지만 'upgrade'와 같은 사용자 정의 이벤트에는 연결하지 않습니다.

FYI, WebSocket 핸드 셰이크 중에 클라이언트에서 '업그레이드'이벤트가 발생했습니다. 초기 WebSocket 핸드 셰이크에서 세션에 액세스하려고합니다. 세션 쿠키는 핸드 쉐이크 예를 들어시 HTTP 헤더에 확실히있다 :

app.on('upgrade', function(req, socket) { 
    var cookieHeader = req.headers['cookie']; 
    console.log(cookieHeader); 
}); 

... 의지 출력 연결 세션 쿠키입니다. 원시 세션 쿠키 토큰을 사용하여 수동으로 세션 객체를 구축하는 방법이 있습니까?


업데이트 : 분명히이 중 매우이 어려울 또는 불가능은 Node.js를의 IRC 채팅방에 어떤 사람들에게 말하기되었다. Connect 미들웨어는 '업그레이드'와 같은 맞춤/비정상적인 이벤트에 노출되지 않습니다. 당신이 응답 개체에 액세스 할 수 없기 때문에

https://github.com/senchalabs/connect/issues/342

답변

1

, 당신은 세션 저장소를 얻어서 세션 객체를 검색 할 수 있어야한다 : 그들은 여기에, 그래서 그것이, Github에서의 문제를 제기했다 쿠키에서 얻은 session_id와 함께 get(session_id, callback)을 호출하면됩니다. 실제로 req 객체가 req.res을 통해 응답에 연결되어 있으면 express.js가 처리하지만 정상적인 세션 미들웨어 기능을 호출 할 수도 있습니다. 그러나 이것이 원시 node.js 이벤트 인 경우 해당 연결 이 시점에서 만들어지지 않았을 수도 있습니다. 미들웨어를 만들 때는 세션 저장소 인스턴스를 수동으로 만들고 참조를 유지 한 다음 options 객체의 세션 미들웨어 팩토리 함수에 전달해야합니다.

+0

제안한대로 세션 저장소를 사용하여 세션을 만들 수도 있습니다. 그러나 이벤트는 node.js 레벨에 연결됩니다. –

관련 문제