【问题标题】:EJS layouts on express 4.x (migration)express 4.x 上的 EJS 布局(迁移)
【发布时间】:2015-04-08 02:15:14
【问题描述】:

我有一个在 express 3.x 上运行的测试应用程序,使用 EJS 作为视图(而不是玉),我能够创建布局并相应地使用它们。但最近迁移到 express 4.x 并且除了布局之外一切都很好。似乎布局没有被正确加载或根本没有加载。

是否有一些新的模块需要加载?我错过了什么?我尝试将布局硬编码到我的 res.render 参数上,但没有采用。我什至为应用程序本身设置了默认布局。

./views/layouts/layout.ejs(所有视图的默认布局

<!DOCTYPE html>
    <html>
      <head>
          <% include partials/head %>
      </head>
      <body>
        <% include partials/top_sidebar %>
        <%- body %>
      </body>

  <% include partials/footer %>
</html>

./views/partials/top_sidebar.ejs

<a href = "/" >Home</a>
<a href = "/about" >About</a>
<a href = "/contact" >Contact</a>

<% if (!isAuthenticated) { %>
    <a href = "/login" >Login</a>
<% } else { %>
    <a href = "/user" >Profile</a>
    <a href = "/" >Jobs</a>
    <a href = "/logout" >Logout</a>
<% } %>

app.js(路由器调用'/about')

router.get('/about', function(req, res, next){
        res.render('about', { isAuthenticated: false, user: req.user, title: 'About' });
    });

./views/about.ejs

<h1><%= title %></h1>
<p>Something that gives about information.</p>

在这个示例代码中,about 视图在没有 top_sidebar 的情况下加载。因此我假设布局没有正确加载。即使我强迫它这样做:res.render('about', { isAuthenticated: false, user: req.user, title: 'About', layout: "./layouts/layout.ejs" });

【问题讨论】:

  • 会不会是与 EJS 版本不兼容有关?我看到 EJS 2 不向后兼容 EJS1,但不确定这是否与您的问题有关。

标签: node.js express migration ejs


【解决方案1】:

对于“ejs-mate”——我还想出了如何添加一个在所有视图中通用的默认布局文件(您仍然可以根据请求覆盖它,如上所述)。

// view engine setup
app.engine('ejs', ejsMate);
app.locals._layoutFile = 'layouts/default'; //this default can be overridden per request
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

使用 'app.locals._layoutFile' 可能不是正确的快捷方式,但它对我有用...

【讨论】:

    【解决方案2】:

    我终于找到了一个很好的模块来代替我的旧方法。我正在使用ejs-mate 进行布局等。唯一的缺点是必须在视图文件上而不是在路线上指定布局。但在大多数情况下,这应该不是一个大问题。

    【讨论】:

    • 您可以使用res.render('index', {_layoutFile: 'boilerplate'}) 声明路线中的布局,以防万一其他人偶然发现。
    • 这是集成在 express 上还是我需要另一个模块。我现在正在使用房地产。提前致谢。
    • 它是 ejs-mate 的一部分。
    猜你喜欢
    • 2012-10-18
    • 2012-09-18
    • 1970-01-01
    • 2016-11-16
    • 2019-01-25
    • 2012-06-12
    • 1970-01-01
    • 2023-03-29
    • 2019-12-09
    相关资源
    最近更新 更多