Express EJS 布局:res.locals 未在布局中呈现

Express EJS Layouts: res.locals not rendering in the layout

我在 Express 4 中使用 Express EJS Layouts 模块。

我不确定如何标记它,但我遇到的问题是这个。我有一个路由文件、一个布局和一个视图。我正在尝试使用下面的代码将 页面标题 页面描述 传递到布局。

路线

router.get('/', function(req, res, next) {

  res.locals.meta = {
    title: 'Page Title',
    description: 'Page Description'
  };

  res.render('pages/index', {
    header: 'Page Header'
  });
});

布局

<!DOCTYPE html>
<html dir="ltr" lang="en" class="no-js">
<head>
  <title><%= meta.title %></title>
  <meta name="description" content="<%= meta.description %>">
</head>
<body>
  <%- body %>
</body>
</html>

查看

<h1 class="page-title"><%= header %></h1>

header 已在视图中呈现,但缺少 页面标题 页面描述。如果我将其他项目添加到 res.locals.meta object 并在呈现它们的视图中引用它们,但不会呈现布局中的任何内容。

我做错了什么?

非常感谢所有帮助。

您是否尝试过在添加这些项目后重新启动节点服务器并刷新页面?另外,您是否在视图中扩展布局?

我假设 express-ejs-layouts 使您能够在新视图中继承默认布局文件。如果是这样,那么新视图将继承(即扩展)parent 布局。

看来您应该将 parent 布局设置为:

app.set('view engine', 'ejs')
app.set('layout', 'myLayout') // defaults to 'layout' 

然后您将自动继承该视图,这样调用您的特定内容视图:

app.get('/', function(req, res){
  res.render('aView', { layout: 'someSpecificLayout' })
})

我的猜测是

  1. 没有继承视图,因为文件不存在于 app.set('layout', 'myLayout')


  1. parent 标签使用不当

header 已按应有的方式呈现,因为它被设置为响应变量。 someSpecificLayout 中的标签应为 <%- contentFor('meta.title') %>,parent 布局 myLayout 应为 <%= meta.title %>

字段 meta 始终在 express-ejs-layout 中设置,无论设置如何 the option to extract meta tags

现在已经是 fixed,所以请更新到最新版本 express-ejs-layout 来解决这个问题。