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' }) })
我的猜测是,
- 没有视图的inheritance,因为该文件不存在于
app.set('layout', 'myLayout')
要么
- 父标签没有正确使用
头文件应该被渲染,因为它被设置为响应variables。 someSpecificLayout
的标签应该像<%- contentFor('meta.title') %>
,父布局myLayout
应该是<%= meta.title %>