2016-09-30 149 views
0

我在我的節點Web應用程序中使用RedisStore的快速會話。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「,

我觀察到有一次,會話在用戶之間越來越混淆。我使用newrelic洞察來記錄一些指標,所以我用它來調試問題。

這是我的發現。從快車會話的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); 
    }); 
}; 

CHECKPOINT 1.的req.sessionID是正確的,但在奇怪CHECKPOINT 2.的req.sessionID印刷爲其他請求在新文物日誌中同時執行。

我相信這是會話混淆的原因。但無法進一步調試以找到它的根本原因。請幫助我提示如何找到問題的根本原因。不知道這是否真的是封閉範圍問題。

回答

0

看起來實際上沒有問題!

如果您在每個檢查點設置斷點,則預計有時req.sessionID在斷點之間有所不同,因爲第二個斷點位於異步回調中。

+0

它沒有斷點問題。因爲這些數據是由newrelic見解給出的,所以在檢查點1時值爲session1,在檢查點2時值爲session2。我在這裏假設newrelic正確地檢測到一個請求執行流程,因此能夠檢測到異常。這裏是洞察示例查詢來檢測問題SELECT * FROM Transaction WHERE'checkpoint1'!='checkpoint2' – ogesh