使用 Node.js 和 Pug 实现 HTML 模板引擎的教程

在前端开发中,使用模板引擎可以大大提高开发效率,减少重复的 HTML 内容。而 Node.js 和 Pug 组合可以让开发者更方便地创建 HTML 模板。本文将介绍使用 Node.js 和 Pug 实现 HTML 模板引擎的步骤及具体细节。

前置条件

在开始使用 Node.js 和 Pug 实现 HTML 模板引擎前,需要先确保开发者已经正确安装了 Node.js、npm 和 Pug。下面分别介绍如何安装。

安装 Node.js

Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境,可以使 JavaScript 在后端运行。使用 npm 安装 Node.js 十分方便。根据自己的操作系统,打开终端(或命令提示符),输入以下命令即可安装 Node.js:

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

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

安装 npm

npm 是 Node.js 的包管理工具。使用以下命令安装 npm:

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

安装 Pug

在 Node.js 环境下,使用以下命令安装 Pug:

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

安装完成后,就可以开始使用 Node.js 和 Pug 实现 HTML 模板引擎了。

实现步骤

  1. 首先创建项目文件夹,新建一个 index.js 文件,用于接受请求并渲染 HTML 页面。
----- --------
-- --------
----- --------
  1. index.js 文件中引入依赖包并监听端口:
----- ------- - -------------------
----- --- - ----------
----- --- - ---------------
----- ---- - -----

---------------- -- -- -
  ------------------- -- --------- -- ---- ----------
---
  1. 编写 Pug 模板文件,在 views 文件夹下新建一个 index.pug 文件,并添加以下内容:
----
  ----
    ----- --- ----
  ----
    -- --- ----
    - -- --- ------- ---- ---
  1. index.js 文件中设置视图引擎,并添加路由,将 Pug 模板渲染为 HTML 页面:
------------- -------- -------

------------ ----- ---- -- -
  --------------------
---
  1. 启动应用,可以看到在浏览器中访问 http://localhost:3000 页面已经成功渲染。
---- --------

深入探讨

Pug 的语法

  • 使用缩进代替标签:Pug 采用缩进标识代码块,而非使用 HTML 那样的尖括号。
---
  - ---- ----
  • 省略闭合标签:与 HTML 不同,Pug 可以省略标签的闭合标记,例如下面这段代码中的 p 标签后没有闭合标签。
---
  - ---- ----
  • 使用数组或对象来创建属性
------------------- -----------
  • 为标签添加类名和 ID
------------------
  - ----- ------
  • 使用变量
- ----- ---- - -----
-------------
  - ------- ----

模板继承

Pug 还支持模板继承,使用继承可以避免重复代码并降低代码复杂度。具体实现方法如下:

  1. layout 文件夹下新建一个 layout.pug 文件,并定义基础布局:
----
  ----
    ------ -----
  ----
    ----- -------

可以看到这里使用了 block 关键字定义了一个块,其中块名为 content,同时此块可以在子模板中被覆盖。这样就可以通过继承模板的形式,让多个页面具有相同的基础布局。

  1. views 文件夹下新建一个 home.pug 文件,继承 layout.pug,并自定义相应部分:
------- ------

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

可以看到,通过 extends 关键字让 home.pug 继承了 layout.pug,并覆盖了 content 块,添加了自定义内容。在使用继承时,对于需要覆盖基础模板内容的部分,只需要定义对应的块即可。剩下部分则会自动继承 layout.pug 中的内容。

路由和控制器

在上述实现步骤中,我们使用了一个简单的路由,并在路由处理程序中使用 res.render 方法渲染了 index.pug 页面。实际应用中我们可能需要更多路由以及控制器层来处理复杂的业务逻辑。

例如,在应用中我们需要处理一个用户列表页面及用户详情页面,可以按照以下步骤进行实现:

  1. routes 目录下新建一个 user.js 文件,添加路由处理程序:
----- ------- - -------------------
----- ------ - -----------------

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

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

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

可以看到,我们在 / 路由和 /:id 路由下分别定义了处理程序,实现了用户列表和用户详情页面。

  1. app.js 文件中添加路由:
----- ---------- - -------------------------

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

可以看到,通过 app.use 方法,将 user.js 中定义的路由挂载到了 /users 下。

  1. 编写对应视图文件,我们需要创建 user 目录以存放用户相关的模板文件。

用户列表模板 list.pug 文件:

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

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

用户详情模板 detail.pug 文件:

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

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

渲染结果可以在浏览器中访问 http://localhost:3000/usershttp://localhost:3000/users/:id,查看效果。

总结

通过本文的学习,我们可以了解到如何使用 Node.js 和 Pug 实现 HTML 模板引擎,以及如何通过继承实现复用代码,如何使用控制器进行路由管理。同时,还可以进一步深入学习 Pug 的语法及高级特性,应用在实际开发中,提高开发效率。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64ed780df6b2d6eab37a053f


猜你喜欢

  • Fastify 应用中的性能测试与性能优化方法

    在高并发、大流量的情况下,Fastify 是一款性能优秀的 Node.js 框架。但是,在开发过程中,我们也需要考虑性能测试和性能优化,来确保 Fastify 应用的高效性和稳定性。

    1 年前
  • 从最基础的开始学习 GraphQL

    GraphQL 是一种用于构建 Web 应用程序的查询语言。它是由 Facebook 开发的,逐渐成为前端领域中的热门技术之一。在 GraphQL 中,客户端可以指定需要从服务器获取的数据,避免了 R...

    1 年前
  • Docker 容器中 Nginx 反向代理的实现

    本文旨在介绍如何在 Docker 容器中使用 Nginx 反向代理实现多个服务的快速切换。 什么是 Docker? Docker 是一个开源的容器化平台,可以让应用程序在虚拟的环境中运行。

    1 年前
  • TypeScript 让人意外的 import 类型

    前言 当我们开始接触TypeScript的时候,其主要目的就是为了让 JavaScript 更具有强类型的特性,从而可以更好的应对 JavaScript 在代码复杂度大、人员多、代码维护周期长等等情况...

    1 年前
  • Socket.io 应用于在线多人游戏聊天系统

    随着互联网技术的不断发展,网游和即时通讯应用的普及,如何实现高效的实时通信一直是前端开发人员关注的重点。Socket.io 是一种基于事件驱动的实时双向通信库,可以帮助前端开发者快速搭建高效的实时通信...

    1 年前
  • Cypress 实战 | 如何用 Cypress 对微信公众号进行自动化测试?

    前言 随着社交媒体的兴起,微信公众号已经成为了越来越多企业、个人与用户沟通的平台。在微信公众号的开发过程中,前端工程师发挥了重要的作用,因此对于微信公众号的自动化测试也成为了前端开发中的一个重要话题。

    1 年前
  • 手写 Promise 库遇到的问题及解决方式

    前言 随着前端应用的复杂度不断增加,异步操作变得越来越常见。Promise 作为一种处理异步操作的机制,已经是现代前端常用工具之一。本文将介绍在手写 Promise 库的过程中,遇到的问题及解决方式。

    1 年前
  • Koa 中如何实现 cookie 和 session?

    在开发 Web 应用的时候,往往需要使用到 cookie 和 session 这两个机制,来实现用户的浏览器端状态管理。针对这个需求,Koa 提供了一些机制来方便使用 cookie 和 session...

    1 年前
  • Kubernetes Ingress Controller:Nginx 与 Traefik 的比较

    在 Kubernetes 中,Ingress 是一种用于管理入站网络流量的对象。它充当了一个入口,允许外部流量进入集群中的服务。为了管理 Ingress,需要一个 Ingress Controller...

    1 年前
  • 在 Jest 中使用 Sinon 测试函数

    在前端开发过程中,测试是非常重要的一个环节。Jest 是一个流行的 JavaScript 测试框架,而 Sinon 则是一个非常有用的 JavaScript 测试工具,它可以用来模拟函数的行为、捕获函...

    1 年前
  • Sequelize 中如何使用 Koa 框架进行 Web 开发

    在前端开发中,使用 Sequelize 和 Koa 框架可以大幅度提高开发效率,同时也使得开发过程更加轻松和有趣。本文将详细介绍如何在 Sequelize 中使用 Koa 框架进行 Web 开发,并提...

    1 年前
  • Vue2.0 源码之响应式设计

    Vue 是一款流行的前端框架,通过使用 Vue 使得开发 SPA 应用变得更加简单和高效。其中的响应式系统是 Vue 的核心特性之一。本文将介绍 Vue 2.0 响应式设计的源码实现原理和使用方法。

    1 年前
  • ES6 中 Promise.all() 方法的使用以及在并发请求中的应用

    在前端开发中,我们经常需要发起多个请求,并且在所有请求完成后再进行下一步处理。在 ES6 中,我们可以使用 Promise.all() 方法来实现这种场景。 Promise.all() 方法介绍 Pr...

    1 年前
  • Chai 中的 subset 断言详解

    在前端开发中,对于实现复杂的业务逻辑或交互效果,通常需要借助于关键数据的校验。而针对 JavaScript 中的数据类型校验这一需求,Chai 是众多 JavaScript 测试框架中一个优秀的断言库...

    1 年前
  • Node.js 中如何使用 Cluster 实现多进程并发处理?

    Node.js 中如何使用 Cluster 实现多进程并发处理? 在 Node.js 中,多线程并发是一项重要的技术。Cluster 模块是 Node.js 提供的一个实现多进程并发处理的解决方案。

    1 年前
  • 使用 Docker 部署 Rails 应用程序

    本文将介绍如何使用 Docker 部署 Rails 应用程序,以便于开发、测试和部署时的配置一致性和可重复性。我们将介绍 Docker 的一些基本概念和命令,并使用一个简单的 Rails 应用程序作为...

    1 年前
  • 如何使用 PWA 优化现有的 Web 应用程序

    如何使用 PWA 优化现有的 Web 应用程序 PWA (Progressive Web App) 是一种新的 Web 应用程序开发方式,它可以增强现有的 Web 应用程序的性能和用户体验,使它们具备...

    1 年前
  • 解决 Hapi 框架下响应超时的问题

    Hapi 是一款基于 Node.js 平台的 Web 开发框架,它提供了路由、中间件、输入输出验证等功能,方便开发人员搭建高性能的 Web 应用程序。不过,在实际开发中,我们可能会遇到一个问题:当应用...

    1 年前
  • 深入学习 Cypress 如何测试 API 接口?

    在现代网络应用开发中,网站前端通常需要与后端通过 HTTP 协议交换数据。而为了保证该接口能正确地处理请求,进行有效的逻辑判断和数据处理,我们需要进行接口测试。Cypress 是一个面向现代 Web ...

    1 年前
  • Flexbox 布局中子元素如何均分剩余空间

    Flexbox 是 CSS3 中引入的一种强大的布局模式,它能够更加灵活地控制元素的排列和内容的布局。在 Flexbox 布局中,有一个常见的需求就是让子元素均分剩余空间,这可以通过 Flexbox ...

    1 年前

相关推荐

    暂无文章