通过connect redis和express会话处理与redis的连接丢失时的意外行为

piztneat  于 2021-06-09  发布在  Redis
关注(0)|答案(0)|浏览(242)

我有一个使用 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的情况下进行计数?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题