Express 在从一个路由到另一个路由的Ejs中使用快速会话

Express 在从一个路由到另一个路由的Ejs中使用快速会话,express,ejs,Express,Ejs,我正在开发一个简单的应用程序,其中主页列出了可能的酒店。你可以点击它,它会显示更多关于点击酒店的信息。我正在使用Express和Ejs来实现这个应用程序 我所做的是,我创建了一个nav.ejs,该导航包含以下链接: 家 提议 签名 注销 但是,这些提供的和注销链接只有在用户成功登录时才会显示,否则它将被隐藏,而登录也是如此。我在登录.js路由中实现了以下功能: router.post('/',函数(req,res){ var username=req.body.username; var pas

我正在开发一个简单的应用程序,其中主页列出了可能的酒店。你可以点击它,它会显示更多关于点击酒店的信息。我正在使用Express和Ejs来实现这个应用程序

我所做的是,我创建了一个
nav.ejs
,该导航包含以下链接:

  • 提议
  • 签名
  • 注销
  • 但是,这些
    提供的
    注销
    链接只有在用户成功登录时才会显示,否则它将被隐藏,而
    登录
    也是如此。我在
    登录.js
    路由中实现了以下功能:

    router.post('/',函数(req,res){
    var username=req.body.username;
    var password=req.body.password;
    var exe=`从用户名=?和密码=?`的用户中选择id`;
    dbConn.get(exe,[用户名,密码],(err,rs)=>{
    如果(错误){
    log(“查找用户时遇到问题”);
    }否则{
    如果(卢比){
    req.session.isLoggedIn=true;
    res.locals.isLoggedIn=true;
    res.redirect('/');
    }否则{
    要求闪存(“错误”,“错误的凭据”);
    res.render(“登录”)
    }
    }
    });
    });
    
    你可以看到,我正在创建一个会话,同时还保存了本地值

    req.session.isLoggedIn=true;
    res.locals.isLoggedIn=true;
    
    nav.ejs
    文件中,我写到

    <nav>
        <a href="/">Home</a>
        <% if (locals.isLoggedIn == true) { %>
            <a href="/offers">Offers</a>
            <a href="/logout">Logout</a>
        <% } else { %>
            <a href="/sign-in">Sign-in</a>        
        <% } %>
    </nav>
    

    res.locals
    不会持续到下一条路线。
    res
    对象仅适用于此特定请求。只有
    req.session
    将为该用户的未来路由保留。在下一个路由中调用
    res.render()
    之前,必须在下一个路由中重新分配
    res.locals

    因此,当您这样做时:

                req.session.isLoggedIn = true;
                res.locals.isLoggedIn = true;
                res.redirect('/');
    
    res.redirect('/')
    向浏览器发送响应。这项请求现在已经完成。 然后浏览器处理重定向并向服务器发出新的请求,请求
    /
    路由。浏览器处理重定向后,当新的
    /
    路由被点击时,您刚才设置的
    res.locals
    值将消失


    因此,在要使用呈现模板中会话数据的所有路由中,从
    req.session
    读取数据,并为要呈现的模板适当设置
    res.locals

    @kiran-这是否回答了您的问题?如果是这样,您可以通过单击答案左侧的复选标记在此处向社区指出这一点。这也将为您在stackoverflow上按照正确的程序赢得一些声誉积分。如果这没有回答你的问题,请评论一下你对问题的哪一部分仍然感到困惑。