2016-09-30 4 views
0

내 노드 웹 응용 프로그램에서 RedisStore와 함께 express-session을 사용하고 있습니다.Nodejs 클로저 문제

NodeJs 버전 : 4.2.4 JS : ES6

"표현": "^ 4.13.3"를 "빠른 세션"을 "https://github.com/echorohit/session/tarball/1d22749aa46280a24a4ee3a993ba0772e6e1e2df" "ioredis": "^ 1.13.0 ", "connect-redis ":"^ 3.0.1 ",

한동안 사용자가 세션을 뒤섞는 것을 목격했습니다. 일부 통계를 로깅하기 위해 새로운 관련 통찰력을 사용하여 문제를 디버깅하는데도 사용했습니다.

내 결과는 다음과 같습니다. 명시 적 세션의 store.js에서

코드

Store.prototype.regenerate = function(req, fn){ 
    var self = this; 
    //CHECKPOINT 1 
    log.addNewRelicCustomParameter("CHECKPOINT1",req.sessionID); 
    this.destroy(req.sessionID, function(err){ 
     //CHECKPOINT 2 
     log.addNewRelicCustomParameter("CHECKPOINT2",req.sessionID); 
     self.generate(req, fn); 
     fn(err); 
    }); 
}; 

1. req.sessionID은 정확했다 검문소에서하지만 이상하게도 req.sessionID를위한 인쇄 된 2체크 포인트 다른 요청은 새로운 유물 로그에서 동시에 실행됩니다.

이것이 세션 혼란의 원인이라고 확신합니다. 그러나 더 이상 디버깅하여 근본 원인을 찾을 수 없습니다. 문제의 근본 원인을 찾는 방법에 대한 도움말을 알려주십시오. 이것이 정말로 클로저 스코프 문제인지 확실하지 않습니다.

답변

0

실제로 문제가없는 것 같습니다.

각 체크 포인트에 중단 점을 설정하면 두 번째 중단 점이 비동기 콜백 안에 있기 때문에 중단 점간에 req.sessionID이 다른 경우가있을 수 있습니다.

+0

해당 중단 점 문제가 없습니다. 이 데이터는 newrelic 통찰력에 의해 제공되므로 체크 포인트 1에서 값은 session1이고 검사 점 2에서는 값이 session2입니다. 여기서는 newrelic이 하나의 요청 실행 흐름을 올바르게 감지하여 이상을 감지 할 수 있다고 가정합니다. 여기 통찰력 샘플 쿼리가 문제를 감지합니다 SELECT * FROM Transaction where 'checkpoint1'! = checkpoint2' – ogesh