在Jade视图中检查会话variables

我使用NodeJS,ExpressJS,PassportJS和玉。

我有一个标题菜单,将显示login或注销。 如果用户尚未login,则显示login;如果用户已login,则login。

菜单在独立的jade文件中: menu.jade并包含在其余的jade文件中。

 include menu 

在menu.jade中如何检查用户是否已经login? 我可以用玉来检查会话variables吗? 像下面的menu.jade

 if ( req.session.name != null) a(href='/logout') Logout else a(href='/login') Login 

谢谢

您需要将会话暴露给模板。 我这样做,是我把我的用户variables放入本地:

注意:req.user是由passportJS设置的,你可以从这里看到他们的例子(在底部)
注2:更多关于当地人的信息

 app.get('*', function(req, res, next) { // put user into res.locals for easy access from templates res.locals.user = req.user || null; next(); }); 

然后在模板中,你可以这样做:

 - 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(); }); 

编辑:感谢robertklep指出res.locals与app.locals

我将带来variables,结果检查login。

 // 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