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 EJS 视图中转义 HTML?

使用 Node.Js、Express 和 EJS 在索引页面的不同部分显示博客文章

Node JS+Express:如何在 HTML(EJS) 中定义和使用 MySQL 数据?

如何使用 Express / Node.JS 创建可在所有视图中访问的全局变量?

在Javascript(node.js,express.js,ejs)中访问服务器端变量[关闭]

从前端将数据发送回 node.js 服务器