Nodejs 关闭问题

Nodejs closure issue

我在我的节点 Web 应用程序中使用 RedisStore 的快速会话。

NodeJs 版本:4.2.4 JS: Es6

"express": "^4.13.3", "express-session": "https://github.com/echorohit/session/tarball/1d22749aa46280a24a4ee3a993ba0772e6e1e2df", "ioredis": "^1.13.0", "connect-redis": "^3.0.1",

我观察到用户之间的会话有时会混淆。我正在使用 newrelic insights 来记录一些指标,所以我也用它来调试问题。

这是我的发现。

来自 express-sessionstore.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 是为新遗留日志中同时执行的其他请求打印。

我确定这是会话混淆的原因。但无法进一步调试以找到根本原因。请帮助我提示如何找到问题的根本原因。不确定这是否真的是闭包范围问题。

看起来其实没什么问题!

如果您在每个检查点都设置了一个断点,预计有时 req.sessionID 会在断点之间有所不同,因为第二个断点在异步回调中。