【问题标题】:Dynamically set meta tags EJS动态设置元标记 EJS
【发布时间】:2019-09-28 22:10:12
【问题描述】:

我正在使用 EJS,我需要为每个帖子设置元标记。我在 layouts 文件夹中有样板文件,我将其包含在每一页中。当用户进入发帖页面时,我需要设置动态元标签和标题。 我的样板

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><%= title %></title>
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.css">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
    <% include ../partials/navbar.ejs %>
    <div class="container-fluid">
        <% include ../partials/filter.ejs %>
        <div class="row">
            <div class="col-sm-12 col-lg-10">
                <%- body -%>
            </div>
            <div class="col-sm-12 col-lg-2">
                <% include ../partials/sidebar %>
            </div>
        </div>
    </div>
</body>
</html>

我正在尝试以这种方式将标题传递给发布页面

res.render('post/index', {title: post.meta.title, post: post});

但我有一个错误,即样板中没有定义标题;

【问题讨论】:

    标签: javascript node.js ejs


    【解决方案1】:

    如果我对问题的理解正确,我为您制作了一个示例。

    帖子的猫鼬模式

    const postScheme = new Schema({
     "title": String, 
     "description": String, // meta description
     "robots": String, // index or noindex
     "lang": String, // en, fr, tr
     "pathname": String, // post-pathname
     "main": String // post body content
    })
    

    获取帖子数据并渲染。

    Post.findOne({ _id: req.params.id }, (err, data) => {
      res.render('post/index', { 'data': data })
    }).lean()
    

    并编辑 .ejs 文件。

    <!doctype html>
    <html lang="<%= data.lang %>">
    <head>
        <meta charset="UTF-8">
        <title> <%= data.title %> </title>
        <meta name="description" content=" <%= data.description %> "/>
        <link rel='stylesheet' href='/stylesheets/style.css' />
    </head>
    <body>
        <% include ../partials/navbar.ejs %>
        <div class="container-fluid">
            <% include ../partials/filter.ejs %>
            <div class="row">
                <div class="col-sm-12 col-lg-10">
                    <%- data.main %>
                </div>
                <div class="col-sm-12 col-lg-2">
                    <% include ../partials/sidebar %>
                </div>
            </div>
        </div>
    </body>
    </html>
    

    【讨论】:

      【解决方案2】:

      您是否在所有页面中呈现title 变量?如果不是这就是为什么你得到未定义的错误。使用locals 对象检查未定义并将您的变量包含在标题 html 标记中。
      如果您不呈现标题变量,您可以为其余页面设置通用标题

      <title> <%= locals.title ? title  : 'Α generic title' %> </title>
      

      【讨论】:

      • 我已经使用这个答案很长时间了。但是由于某种原因,当您共享链接时它不起作用。它显示一个只有缩略图和网站地址的空白预览。
      猜你喜欢
      • 2015-09-03
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 2020-12-29
      • 2017-10-12
      • 2017-12-16
      • 2015-02-09
      • 1970-01-01
      相关资源
      最近更新 更多