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
会在断点之间有所不同,因为第二个断点在异步回调中。
我在我的节点 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
会在断点之间有所不同,因为第二个断点在异步回调中。