我有一个使用 express-session
以及 connect-redis
设置redis会话存储。在遵循了“如何处理与redis失去的连接”的连接redis文档部分以及该部分对本文的引用之后,我集成了以下功能:
var sessionMiddleware = session( /* setup session here */ )
app.use(function (req, res, next) {
var tries = 10
function lookupSession(error) {
if (error) {
return next(error)
}
tries -= 1
console.log(`Num tries left: ${attempts}`);
console.log(req.session);
if (req.session !== undefined) {
return next()
}
if (tries < 0) {
return next(new Error('oh no'))
}
sessionMiddleware(req, res, lookupSession)
}
lookupSession()
})
我很困惑,因为每次我提出请求或刷新我的应用程序时 lookupSession
函数被调用两次-其中 req.session
总是第一次未定义,然后第二次定义。此外,我的redis示例是否真的启动似乎并不重要。
有时一次刷新就会导致 lookupSession
函数被调用5次以上,只需反复打印相同的消息块:
Num tries left: 9
undefined
Num tries left: 8
Session {
cookie: {
path: ...,
_expires: ..,
originalMaxAge: ...,
httpOnly: ...,
sameSite: ...,
secure: ...
}
}
你知道为什么 req.session
最初总是未定义,然后定义(在两个背靠背呼叫中)?我可以想象,只要redis示例仍处于关闭状态,会话就不应该被定义,我可以想象它应该在关闭时被定义。你知道为什么这个功能会被触发5次以上吗 tries
在每次都不递减到0的情况下进行计数?
暂无答案!
目前还没有任何答案,快来回答吧!