我在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>
标题会在视图中呈现,但它缺少页面标题和页面描述。如果我将其他项添加到res.locals.meta
对象并在视图中引用它们,则会渲染它们,但不会呈现布局中的任何内容。
我做错了什么?
非常感谢所有帮助。
答案 0 :(得分:1)
您是否尝试在添加这些项目后重新启动节点服务器并刷新页面?另外,您是否在视图中扩展了布局?
我假设express-ejs-layouts允许您在新视图中继承默认布局文件。如果是,则新视图继承(即扩展)父布局。
看起来你应该将父布局设置为:
app.set('view engine', 'ejs')
app.set('layout', 'myLayout') // defaults to 'layout'
然后,您将自动继承该视图,并调用您的特定内容视图:
app.get('/', function(req, res){
res.render('aView', { layout: 'someSpecificLayout' })
})
我的猜测是
app.set('layout', 'myLayout')
或
标头按原样呈现,因为它被设置为响应变量。 someSpecificLayout
中的代码应与<%- contentFor('meta.title') %>
类似,父级布局myLayout
应为<%= meta.title %>
答案 1 :(得分:1)
meta
字段始终在express-ejs-layout
设置,无论设置为the option to extract meta tags。
现在已经fixed,因此请更新到最新版本的express-ejs-layout
以解决问题。