#node.js #mongodb #express #session #connect-mongo
Вопрос:
Я использую express-session
и connect-mongo
и у меня есть рабочее хранилище сеансов, как показано ниже:
import session from 'express-session'
import MongoStore from 'connect-mongo'
app.use(session({
secret: 'configs.secret',
resave: true,
saveUninitialized: true,
rolling: true,
store: MongoStore.create({
client: mongoose.connection.getClient()
}),
cookie: { /* ..configs.. */ }
}))
С сеансом все в порядке. Но для каждого нового сеанса я создаю новый документ из другой коллекции и связываю его с сеансом.
Допустим, я создаю тест, а затем добавляю его идентификатор req.session.quiz
. И устанавливает тест status
на 'started'
. Доступные состояния внутри объекта quiz: ['started'', 'completed', 'expired']
. Итак, чего я хочу добиться: когда пользователь покидает браузер на 10 минут, я хочу удалить его сеанс и немедленно установить статус викторины 'expired'
.
У меня есть рабочая версия того, как и когда срок действия файлов cookie истекает, как показано ниже, и хранилище автоматически удаляет истекшие сеансы соответствующим образом:
app.use(session({
// ..same configs above..
cookie: {
httpOnly: true,
secure: !devMode(),
sameSite: true,
maxAge: ms('1m')
}
}))
Но я не знаю, возможно ли реализовать или привязать функцию, чтобы я мог обновить статус теста, как описано выше. Доступные события, которые connect-mongo
предлагает, ограничены этим. А также express-session
не упомянул способ привязки pre
или post
для доступных событий.
Был бы признателен за вашу помощь!