为什么闪存错误并非始终有效?

时间:2018-11-25 17:08:25

标签: node.js express flash-message

我正在使用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作为视图引擎。有人可以帮忙吗?非常感谢

当然,我使用

将错误传递给ejs
router.use( (req,res,next)=>{
    res.locals.error =  req.flash("error");
    next();)}

1 个答案:

答案 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