Node.js - 如何在 EJS 视图中使用我的局部变量
Posted
技术标签:
【中文标题】Node.js - 如何在 EJS 视图中使用我的局部变量【英文标题】:Node.js - How can I use my local variable with EJS view 【发布时间】:2014-07-19 13:04:55 【问题描述】:我尝试在 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 );
【问题讨论】:
我没有使用过 EJS,但可能是 login = typeof(req.session.use) != 'undefined' 之类的东西? req.session.use : 将为您解决问题。 【参考方案1】:确保在声明 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
【讨论】:
【参考方案2】:或者如果您不想创建中间件,您也可以直接在您的 ejs 文件中使用以下检查:
if(locals.login) ....
【讨论】:
以上是关于Node.js - 如何在 EJS 视图中使用我的局部变量的主要内容,如果未能解决你的问题,请参考以下文章
使用 Node.Js、Express 和 EJS 在索引页面的不同部分显示博客文章
Node JS+Express:如何在 HTML(EJS) 中定义和使用 MySQL 数据?
如何使用 Express / Node.JS 创建可在所有视图中访问的全局变量?