关于javascript:Node.js-如何在EJS视图中使用局部变量

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) { .... }