Неожиданное поведение при обработке потерянных соединений с Redis через connect-redis и express -session - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть приложение express, которое использует express-session и connect-redis для настройки хранилища сеансов Redis. После того, как оба раздела connect-redis docs указаны в разделе «Как обрабатывать потерянные соединения с 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()
})

Я запутался, потому что каждый раз, когда я делаю запрос или обновляю sh мое приложение, оно lookupSession функция вызывается дважды - где req.session всегда неопределен в первый раз, а затем определяется во второй раз. Кроме того, кажется, что не имеет значения, работает ли мой экземпляр Redis на самом деле или нет.

Иногда один refre sh вызывает функцию 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?

...