Node.js 检查Jade视图中的会话变量
我使用NodeJS、ExpressJS、PassportJS和Jade 我有一个标题菜单,将显示登录或注销。如果用户尚未登录,则显示Login;如果用户已登录,则显示LogoutNode.js 检查Jade视图中的会话变量,node.js,express,pug,passport.js,Node.js,Express,Pug,Passport.js,我使用NodeJS、ExpressJS、PassportJS和Jade 我有一个标题菜单,将显示登录或注销。如果用户尚未登录,则显示Login;如果用户已登录,则显示Logout // routes/some.js exports.index = function (req, res) { res.render('somepage', { isAlreadyLoggedin: checkSessionSomeway() }) } // menu.jade if
// routes/some.js
exports.index = function (req, res) {
res.render('somepage', {
isAlreadyLoggedin: checkSessionSomeway()
})
}
// menu.jade
if ( isAlreadyLoggedin != null)
a(href='/logout') Logout
else
a(href='/login') Login
菜单位于单独的jade文件中:菜单。jade
包含在其余的jade文件中
include menu
在menu.jade中,如何检查用户是否已登录?我可以检查jade中的会话变量吗?类似于下面的菜单。jade
if ( req.session.name != null)
a(href='/logout') Logout
else
a(href='/login') Login
谢谢您需要向模板公开会话。我这样做的方式是将我的用户变量放入局部变量: 注意:req.user由passportJS设置,您可以从
注#2:关于本地人的更多信息 然后在模板中,您可以执行以下操作:
- if(_user) {
div.menuForLoggedInUser
- } else {
div.menuForLoggedOutUser
- }
如果您不想将整个用户对象暴露在模板中,可以随意将“loggedIn”放在本地并检查。。。这样的话:
app.get('*', function(req, res, next) {
// just use boolean for loggedIn
res.locals.loggedIn = (req.user) ? true : false;
next();
});
编辑:感谢您指出res.locals与app.locals的区别我将为签入带来结果变量
// routes/some.js
exports.index = function (req, res) {
res.render('somepage', {
isAlreadyLoggedin: checkSessionSomeway()
})
}
// menu.jade
if ( isAlreadyLoggedin != null)
a(href='/logout') Logout
else
a(href='/login') Login
我认为,在渲染视图时,还需要将app.locals作为本地人公开。(node.js和express大多避免使用“magic”)我的实现确实有点缺陷。而不是app.locals={};它应该是app.locals({});(正如expressJS文档所述)
app.locals
是应用程序范围的存储,您不应该使用它来存储动态数据,如req.user
(因为其他请求可能会覆盖它)。改用。我想你只打了一次错,写if(user)
而不是if(\u user)