Express.js 中使用 Pug 模板引擎渲染页面的技巧

阅读时长 6 分钟读完

在前端开发中,使用模板引擎可以使页面的构建更加高效便捷。在 Express.js 中,Pug(以前叫做Jade)是一种流行的模板引擎,具有简洁、易读和易维护的特点。在这篇文章里,我们将学习如何在 Express.js 中使用 Pug 模板引擎来渲染页面。

安装 Pug

首先,我们需要安装 Pug。可以通过 npm 安装,具体命令如下:

配置 Pug

安装完 Pug 后,我们还需要用 Express.js 集成 Pug。做法很简单,只需在服务器代码中添加以下代码:

其中,app.set('view engine', 'pug')告诉 Express.js 使用 Pug 作为视图引擎。app.set('views', __dirname + '/views')指示 Express.js 在 views 文件夹中查找视图文件。

创建模板文件

现在,我们可以开始创建 Pug 模板文件了。在 views 文件夹下新建一个 index.pug 文件,这是我们将要渲染的模板文件。

这是一个非常基本的示例,但足以表示 Pug 的核心思想:缩进代表元素层次结构。比如,title 元素是 head 元素的子元素,因此在 Pug 文件中,title 要缩进两个空格。

渲染模板文件

现在我们要在服务器端将模板文件渲染成 HTML。为此,我们需要在 Express.js 中为路由添加一个处理程序。在这个处理程序中,通过调用 res.render() 方法将 Pug 模板渲染成 HTML。

这里实现的路由处理程序指示 Express.js 渲染位于 views/index.pug 文件的模板。注意,我们不需要在 res.render()方法中添加 .pug 扩展名。

在 Pug 模板中插入动态数据

此时的页面还是一份静态文档,而我们经常需要向模板中插入动态数据。在 Pug 中,我们可以通过 #{variable} 语法来插入动态数据。

为了说明这个,我们先创建一个路由,从而可以动态地向模板中传递一些数据:

现在,在 index.pug 中,我们可以通过 #{title}#{message} 分别获取传递来的数据。下面是更改后的 index.pug 文件:

循环和条件语句

有时,我们需要在模板中写循环和条件语句。在 Pug 中,我们可以使用 foreachif 语句来实现。

例如,我们可以使用 each 循环来迭代并显示一个数组:

-- -------------------- ---- -------
------------ ----- ---- -- -
  ----- ----- - -
    - ------ --- ---- - ------------- ------- ------- ---- --
    - ------ ------- ------- ------- ------- --
    - ------ ---- ----- -------- ------- --- ----- ----------- --
    - ------ ---- ------- ----- -- ---------- ------- -------- ------ -------- -
  --
  
  ------------------- - ----- ---
---

然后,在 index.pug 中,我们可以使用 each 来迭代并显示这个数组:

-- -------------------- ---- -------
----
  ----
    ----- --------
  ----
    -- ----------
    --
      ---- ---- -- -----
        --- ---------- - - -- - - -----------
    - ---- -- - ----------

在此示例中,我们首先将一个包含书籍的数组传递给模板,然后使用 each 迭代每个书籍。在每个循环迭代中,我们可以通过 book.titlebook.author 访问每本书的信息。

类似地,我们可以使用 if 条件语句来根据不同条件显示不同的内容。

总结

在 Express.js 中使用 Pug 模板引擎渲染页面是一项有用的技能。在本文中,我们学习了如何在 Express.js 中配置 Pug、创建模板文件、渲染模板文件以及向模板中插入动态数据、编写循环和条件语句。希望这些技巧能够帮助您更加高效地构建 Web 应用程序。

完整代码

-- -------------------- ---- -------
----- ------- - -------------------
----- --- - ----------

------------- -------- -------
---------------- --------- - ----------

------------ ----- ---- -- -
  ----- ----- - -
    - ------ --- ---- - ------------- ------- ------- ---- --
    - ------ ------- ------- ------- ------- --
    - ------ ---- ----- -------- ------- --- ----- ----------- --
    - ------ ---- ------- ----- -- ---------- ------- -------- ------ -------- -
  --

  ------------------- - ------ --- ---------- --- ------ -------- ------ ----- ----- ---
---

---------------- -- -- -
  ---------------- --------- -- ---- --------
---

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ddfcfff6b2d6eab3948e71

纠错
反馈