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

Express 4使用Express EJS布局模块。

我不知道如何标签,但我有这个问题。 我有一个路线文件,一个布局和一个视图。 我试图通过使用下面的代码的布局通过页面标题页面描述

路线

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> 

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

我究竟做错了什么?

所有的帮助,非常感谢。

无论设置提取元标记的选项如何,字段meta总是被设置为express-ejs-layout

现在已经修复了 ,所以更新到express-ejs-layout的最新版本来解决这个问题。

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

我假设express-ejs-layouts使您能够在新视图中inheritance默认布局文件。 如果是这样,则新视图inheritance(即扩展)父布局。

它看起来像你应该设置父布局为:

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

然后,您将自动inheritance该视图,并调用您的特定内容视图:

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

我的猜测是,

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

要么

  1. 父标签没有正确使用

头文件应该被渲染,因为它被设置为响应variables。 someSpecificLayout的标签应该像<%- contentFor('meta.title') %> ,父布局myLayout应该是<%= meta.title %>