我正在使用Express-Flash发送Flash消息。直到我使用重定向到req.header(“ Referer”)为止,它一直运行良好。特别是,我试图将产品添加到购物车中,但我不希望在购物车中已有产品的情况下添加产品。以下代码让我很困扰,因为我没有得到它的表现。
router.get("/add/:id, (req, res) =>{
var backURL= req.header("Referer") || "/";
var cart= req.session.cart;
var productId= req.params.id;
var found=0;
cart.items.forEach(item =>{
if(item.id===productId){
found=1;}
})
if(found){
req.flash("error", "Item Already in Cart");
res.redirect(backURL);} else{
res.redirect(backURL); }
})
该中间件还执行其他操作,例如在商品不存在时将其添加到购物车。该部分运行良好,并且通过console.logging变量找到了,我确信该代码始终会找到重复项,但它并非始终都会返回闪存错误。我正在使用ejs作为视图引擎。有人可以帮忙吗?非常感谢
当然,我使用
将错误传递给ejsrouter.use( (req,res,next)=>{
res.locals.error = req.flash("error");
next();)}
答案 0 :(得分:1)
将消息存储在会话中,并从目标页面的会话中读取消息以显示消息,因为在为闪存保存会话之前,它会进行重定向。仔细阅读参考文献1。
req.flash('message', 'Please check your email to confirm it.');
req.session.save(function () {
res.redirect('/register');
});
参考文献1:https://github.com/mweibel/connect-session-sequelize/issues/20
参考2:https://github.com/mweibel/connect-session-sequelize/issues/7#issuecomment-59469816