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' })
})
我的猜测是
- 没有继承视图,因为文件不存在于
app.set('layout', 'myLayout')
或
- parent 标签使用不当
header 已按应有的方式呈现,因为它被设置为响应变量。 someSpecificLayout
中的标签应为 <%- contentFor('meta.title') %>
,parent 布局 myLayout
应为 <%= meta.title %>
字段 meta
始终在 express-ejs-layout
中设置,无论设置如何 the option to extract meta tags。
现在已经是 fixed,所以请更新到最新版本 express-ejs-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' })
})
我的猜测是
- 没有继承视图,因为文件不存在于
app.set('layout', 'myLayout')
或
- parent 标签使用不当
header 已按应有的方式呈现,因为它被设置为响应变量。 someSpecificLayout
中的标签应为 <%- contentFor('meta.title') %>
,parent 布局 myLayout
应为 <%= meta.title %>
字段 meta
始终在 express-ejs-layout
中设置,无论设置如何 the option to extract meta tags。
现在已经是 fixed,所以请更新到最新版本 express-ejs-layout
来解决这个问题。