Express 在从一个路由到另一个路由的Ejs中使用快速会话
我正在开发一个简单的应用程序,其中主页列出了可能的酒店。你可以点击它,它会显示更多关于点击酒店的信息。我正在使用Express和Ejs来实现这个应用程序 我所做的是,我创建了一个Express 在从一个路由到另一个路由的Ejs中使用快速会话,express,ejs,Express,Ejs,我正在开发一个简单的应用程序,其中主页列出了可能的酒店。你可以点击它,它会显示更多关于点击酒店的信息。我正在使用Express和Ejs来实现这个应用程序 我所做的是,我创建了一个nav.ejs,该导航包含以下链接: 家 提议 签名 注销 但是,这些提供的和注销链接只有在用户成功登录时才会显示,否则它将被隐藏,而登录也是如此。我在登录.js路由中实现了以下功能: router.post('/',函数(req,res){ var username=req.body.username; var pas
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上按照正确的程序赢得一些声誉积分。如果这没有回答你的问题,请评论一下你对问题的哪一部分仍然感到困惑。