Skip to content
快速预览

express模板引擎

✍️ w 🕒 2023-06-06 08:22:52(a year ago) 🔗 B.NodeJS学习 服务端 express

前端模板引擎是一种将数据和模板结合起来生成 HTML 页面的工具。它可以将数据和模板分离,使得前端开发人员可以专注于页面的设计和交互,而不必担心数据的处理和渲染。

前端模板引擎可以分为两类:客户端模板引擎和服务器端模板引擎。

  1. 客户端模板引擎 客户端模板引擎是在浏览器端运行的模板引擎,它使用 JavaScript 代码来生成 HTML 页面。客户端模板引擎通常使用 Mustache、Handlebars、Underscore 等模板引擎库。

优点:

  • 可以在客户端动态生成 HTML 页面,减轻服务器的负担。

  • 可以在浏览器端缓存模板,提高页面加载速度。

  • 可以在客户端实现动态数据绑定,使得页面可以实时更新。 缺点:

  • 由于是在浏览器端运行,所以对于大规模数据的处理可能会影响页面性能。

  • 由于需要将模板和数据都传输到客户端,所以可能会增加网络传输的负担。

  1. 服务器端模板引擎 服务器端模板引擎是在服务器端运行的模板引擎,它使用服务器端的编程语言来生成 HTML 页面。服务器端模板引擎通常使用 PHP、Java、Python 等编程语言的模板引擎库。

优点:

  • 可以在服务器端动态生成 HTML 页面,减轻客户端的负担。

  • 可以在服务器端缓存模板,提高页面加载速度。

  • 可以在服务器端实现动态数据绑定,使得页面可以实时更新。 缺点:

  • 由于是在服务器端运行,所以对于大规模数据的处理可能会影响服务器性能。

  • 由于需要将已经生成的 HTML 页面传输到客户端,所以可能会增加网络传输的负担。

前端常见使用的

模板引擎描述
Pug受 Haml 启发的模板引擎,曾用名 Jade。
Haml.jsHaml 模板引擎的实现。
EJS允许在 HTML 模板中嵌入 JavaScript 代码的模板引擎。
hbsHandlebars.js 的适配器,是 Mustache.js 模板引擎的扩展。
Squirrelly快速的模板引擎,支持部分模板、帮助程序、自定义标签、过滤器和缓存。不敏感于空格,适用于任何语言。
Eta轻量级的嵌入式 JS 模板引擎,支持自定义分隔符、异步、空格控制、部分模板、缓存和插件。
combyne.js一个希望按照您的期望工作的模板引擎。
Nunjucks受 jinja/twig 启发的模板引擎。
marko快速且轻量级的基于 HTML 的模板引擎,将模板编译为 CommonJS 模块,支持流式传输、异步渲染和自定义标签。
whiskers小巧快速的模板引擎,使用 Mustache 语法。
Blade受 Jade 和 Haml 启发的 HTML 模板编译器。
Haml-Coffee允许编写内联 CoffeeScript 的 Haml 模板。
express-hbs适用于 Express 3 的 Handlebars,支持布局、部分模板和块。
express-handlebars适用于 Express 的 Handlebars 视图引擎,易于使用。
express-views-dom适用于 Express 的 DOM 视图引擎。
rivets-server允许在服务器上呈现 Rivets.js 模板的模板引擎。
LiquidJS简单、表达性强且安全的模板引擎。
express-tl适用于 Express 的模板文字引擎实现。
Twing适用于 Node.js 的一流 Twig 引擎。
Sprightly极其轻量级的 JS 模板引擎(只有 45 行代码),包含您想在模板引擎中看到的所有基本功能。
html-express-js一个小型的模板引擎,用于使用本机 JavaScript 提供静态或动态 HTML 页面。

在express 中使用模板

这里以ejs 为例使用模板,在使用模板前需要按照模板的包 npm i ejs --save

js
const express = require('express')
const path = require('path')
const app = express()

// 设置模板引擎
app.set('view engine', 'ejs')

//  设置模板文件存放位置   模板文件: 具有模板语法内容的文件
app.set('views', path.resolve(__dirname, './views'))

app.get('/index', (req, res) => {
	// 渲染模板 index view/index.ejs
	res.render('index', { name: 'zs', age: 20 })
})

//监听端口, 启动服务
app.listen(3000, () => {
	console.log('服务已经启动, 端口 3000 正在监听中....')
})
  • views/index.ejs
html
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>Document</title>
	</head>
	<body>
		<p><%=name%></p>
		<p><%=age%></p>
	</body>
</html>

非包含的第三方模板

处理 express 可以兼容的一些模板,如果使用第三方模板配置如下

shell
npm install --save art-template
npm install --save express-art-template
js
const express = require('express')
const path = require('path')
const app = express()

// 用于在express中使用art-template模板引擎
const artTemplate = require('express-art-template')

// 设置模板引擎art-template 解析模板文件后缀名为html
app.engine('html', artTemplate)

//  设置模板文件存放位置   模板文件: 具有模板语法内容的文件
app.set('views', path.resolve(__dirname, './views'))

app.get('/index', (req, res) => {
	// 渲染模板 index view/index.ejs
	res.render('index.html', {
		title: 'Art Template Demo',
		message: 'Hello, Art Template!',
	})
})

//监听端口, 启动服务
app.listen(3000, () => {
	console.log('服务已经启动, 端口 3000 正在监听中....')
})
  • 省略后缀写法
js
...
// 省略模板文件后缀名 	res.render('index'
app.set('view engine', 'html')

app.get('/index', (req, res) => {
	// 渲染模板 index view/index.ejs
	res.render('index', {
		title: 'Art Template Demo',
		message: 'Hello, Art Template!',
	})
})
...

Released under the MIT License.