У меня есть приложение 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?