我正在安装一个非常简单的应用程序,登录的用户可以通过Express,MongDB,Mongoose和Express-session搜索和预订火车旅程。选定的旅程会临时保存在req.session.order变量中(据我了解,这是所有路线的全局变量),一旦确认,A会作为用户的子文档存储在DB中,而B-req.session.order会分配给一个空数组,以便用户可以继续预订/选择其他旅程。问题是在确认后,当返回首页时,req.session.order数组不为空,并且仍包含先前已确认并存储的先前选择的旅程。
正如您在下面的代码中看到的那样,我只是控制台在/ confirm route指令的末尾记录req.session.order,该指令按预期返回空数组,但是回到主页时,控制台仍会记录先前已完成的旅程。_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',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,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 });
}
});