Node.js - How can I use my local variable with EJS view
我尝试在EJS上使用我的局部变量。检查用户是否已连接只是一个变量。
->就像该链接上的最后一篇文章:
如何知道用户是否使用passport.js登录?
所以,
app.js
1 2 3 4 | app.use(function (req, res, next) { res.locals.login = req.isAuthenticated(); next(); }); |
查看EJS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <% if (login) { %> <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> Menu Item 1 </li> <li> Menu Item 2 </li> <li> Menu Item 3 </li> </ul> <% } %> |
我收到一个错误:
1 | login is not defined |
我想在所有视图中使用此变量。可能吗?
在此方法之前,我每次在render中发送变量时都这样发送:
1 | res.render('ad/index', { login: req.session.user }); |
在声明app.router之前,请确保您声明的是用于设置res.locals.login的中间件函数。这样可以确保在您的中间件可以设置res.locals.login之前,渲染模板的路由不会渲染模板。类似于:
1 2 3 4 5 6 7 8 9 10 | app.use(function (req, res, next) { res.locals.login = req.isAuthenticated(); next(); }); app.configure(function(){ ... app.use(app.router); ... }); |
似乎其他人也提出了类似的问题,但使用其他模板引擎:从Backbone.router模板访问res.locals。
或者,如果您不想创建中间件,也可以直接在ejs文件中使用以下检查:
1 | if(locals.login) { .... } |