Я создаю очень простое приложение, в котором вошедший в систему пользователь может искать и бронировать поездки на поездах через Express, MongDB, Mongoose и Express-session. Выбранные поездки временно сохраняются в переменной req.session.order (которая, как я понимаю, является глобальной для всех маршрутов) и после подтверждения сохраняются в БД в качестве поддокументов пользователя, а B-req.session.order назначаетсяпустой массив, чтобы пользователь мог продолжить бронирование / выбор других поездок. Проблема заключается в том, что после подтверждения при возвращении на домашнюю страницу массив req.session.order не пуст и все еще содержит ранее выбранные поездки, которые уже были подтверждены и сохранены.
Как вы можете видеть вПриведенный ниже код, я просто консоль регистрирую req.session.order в конце инструкции маршрута / verify, которая возвращает пустой массив, как и ожидалось, но при возвращении на домашнюю страницу консоль по-прежнему записывает в журнал ранее выдвинутый trip._id.
Почувствуйте, что я что-то упускаю в экспресс-сессии, большое спасибо за вашу помощь
// (req.session.order are initialized to [] in singnin/signup routes before redirecting to home page)
/* GET confirmation page. */
router.get('/order', async function(req, res, next) {
var bookedJourney = await journeyModel.findOne({ _id: req.query.id });
**req.session.order.push(bookedJourney);**
res.render('confirmation', {order: req.session.order, reformatTime: reformatTime, reformatDate: reformatDate});
});
/* POST add selected journeys to trip list */
router.post('/confirm', async function(req, res, next) {
var currentUser = await userModel.findOne({ email: req.session.user.email });
req.session.order.forEach((order) => {
currentUser.journey.push(order._id);
});
await currentUser.save();
**req.session.order = []; // This returns empty array as expected**
console.log(req.session.order);
});
In the HTML, when clicking on the confirm button, a modal is launched with a button leading back to home page:
/* GET home page. */
router.get('/home', function(req, res, next) {
**console.log(req.session.order); // Not sure why the req.session.order here still contains the bookedJourney id, should be []**
if (!req.session.user) {
res.redirect("/");
} else {
console.log(req.session.order); // Ditto
res.render('home', { user: req.session.user });
}
});