我尝试在EJS上使用我的局部变量。检查用户是否已连接只是可变的。 - >就像这个链接上的最后一篇文章: How to know if user is logged in with passport.js?
所以,
app.js
app.use(function (req, res, next) {
res.locals.login = req.isAuthenticated();
next();
});
查看EJS
<% if (login) { %>
<div id="subMenuUser">
<div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
</span>Menu<span class="caret"></span>
</button>
<ul class="dropdown-menu pull-right" role="menu">
<li><a href="#" role="menuitem">Menu Item 1</a></li>
<li><a href="#" role="menuitem">Menu Item 2</a></li>
<li><a href="#" role="menuitem">Menu Item 3</a></li>
</ul>
</div>
</div>
<% } %>
我收到错误消息:
login is not defined
我想在所有视图中使用此变量..可能吗?
在此方法之前,我每次都将我的变量发送到渲染中:
res.render('ad/index', { login: req.session.user });
答案 0 :(得分:3)
确保在宣布app.router之前声明设置res.locals.login的中间件功能。这可确保在中间件设置res.locals.login之前,呈现模板的路由不会呈现模板。有点像:
app.use(function (req, res, next) {
res.locals.login = req.isAuthenticated();
next();
});
app.configure(function(){
...
app.use(app.router);
...
});
似乎其他人提出了类似的问题,但是使用了其他模板引擎:Accessing res.locals from Backbone.Router templates
答案 1 :(得分:0)
或者,如果您不想创建中间件,也可以直接在ejs文件中使用以下检查:
if(locals.login) { .... }