Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript req.session.destroy()之后req.flash()不工作_Javascript_Node.js_Session_Express_Flash Message - Fatal编程技术网

Javascript req.session.destroy()之后req.flash()不工作

Javascript req.session.destroy()之后req.flash()不工作,javascript,node.js,session,express,flash-message,Javascript,Node.js,Session,Express,Flash Message,根据条件,我需要销毁用户的当前会话,并将其重定向到带有消息的登录页面。我使用flash只显示一次消息。在任何地方,这都可以在我的应用程序上正常工作,除了这里,因为这里我在req.session.destroy()之后使用req.flash 我怎样才能做到这一点?我曾尝试将req.flash()放在req.session.destroy()之前,但这不起作用,因为req.session.destroy()会清除我们刚刚存储flash消息的会话。谢谢 if( req.session.admin

根据条件,我需要销毁用户的当前会话,并将其重定向到带有消息的登录页面。我使用
flash
只显示一次消息。在任何地方,这都可以在我的应用程序上正常工作,除了这里,因为这里我在
req.session.destroy()之后使用
req.flash

我怎样才能做到这一点?我曾尝试将
req.flash()
放在
req.session.destroy()
之前,但这不起作用,因为
req.session.destroy()
会清除我们刚刚存储flash消息的会话。谢谢

   if( req.session.adminUser.blocked ){
        req.logout();
        req.session.destroy(()=>{
            req.flash("flashMessage", "You are blocked, Please contact admin");
            req.session.save(function(){
                res.redirect("/admin-panel/login");
                return false;
            });//session.save()
        });
    }
通过这段代码,我得到了这个错误-
错误:req.flash()需要会话。如果我在
session.destroy
语句之前移动flash语句,那么我不会得到任何错误,但不会显示消息。

如果您查看,您可以看到此中间件需要会话才能工作

req.flash()
取决于有效的会话,因此如果您销毁该会话,闪存信息也会被销毁

在我看来,实际上最好创建一个单独的“阻止”页面,并呈现该页面,而不是将被阻止的页面重定向回登录页面(他们无论如何都无法登录):

作为一种(不太美观的)替代方法,您可以向登录页面传递一个查询字符串,指示用户已被阻止:

res.redirect("/admin-panel/login?blocked=true");

并在登录模板中进行检查,查看是否应显示“您被阻止”消息。

谢谢。但我知道这一点,我已经在使用会话。正如我提到的,在我的应用程序中,它在任何地方都可以正常工作。问题是,在调用
req.session.destroy()
后,它在回调中不起作用。在调用
req.session.destroy()
后,没有
会话中的
可供
flash
使用,那么您希望它如何工作?有什么方法可以使它工作吗?你明白我的要求吗?如果用户被阻止,我需要通过破坏他们的会话将他们注销,然后将他们重定向回登录屏幕。你可以实现类似的机制,例如使用
cookies
,但是使用
flash
,你不能,因为它需要很多会话时间。我觉得你的两个选择都很好。:)
res.redirect("/admin-panel/login?blocked=true");