Node.js --- 模板引擎EJS

news/2025/1/19 21:11:26/

1. 前言

模板引擎是一种工具或库,用于在开发中生成动态内容的 HTML 页面。它通过将预定义的模板与数据结合,生成最终的输出(如 HTML 页面、字符串等)。模板引擎广泛应用于前端和后端开发,尤其是在构建动态网站时。

2. EJS模板引擎

EJS (Embedded JavaScript Templates) 是一种模板引擎,可以帮助我们在 HTML 页面中嵌入 JavaScript 代码,用于动态渲染内容。EJS 语法简洁且与 HTML 高度相似,是 Express.js 等服务器端框架的常用选择。

在项目中安装EJS

npm install ejs

模板引擎是分离用户界面和业务数据的一种技术

在Express中配置EJS为模板引擎

const express = require("express");
const app = express();// 设置模板引擎为 EJS
app.set("view engine", "ejs");// 设置模板文件目录(默认是 ./views)
app.set("views", "./views"); //模板引擎文件都存储在该文件夹中// 配置静态文件目录
app.use(express.static("public"));app.listen(3000, () => console.log("Server running at http://localhost:3000"));

3. express中使用ejs

模板引擎是一种工具,用于将数据与 HTML 模板结合,从而动态生成网页内容。模板引擎的主要功能是通过嵌入动态数据(如从数据库中获取的数据)生成静态的 HTML 页面。

npm install ejs

设置模板引擎

使用 app.set('view engine', 'ejs') 告诉 Express 使用 EJS 作为模板引擎。

app.set('view engine','ejs')

node.js中也不仅仅只有ejs模板引擎,例如pug,twing等模板引擎

设置视图文件路径

Express默认会从views文件夹查找视图模板文件

app.set('views',path.resolve(...))

 也可以指定一个自定义的文件夹路径来存放视图文件,而不是使用默认的 views 文件夹。

渲染路由

创建路由设置render响应,render()传入参数模板的文件路径,会在views文件夹中查找,以及对应数据,数据以键值对的形式传递

app.get('/home',(req,res)=>{let title = 'hahahahahaha'//res.render('模板的文件路径','数据')res.render('home',{title})
})
{ username: "Alice" }

示例:渲染模板

const express = require('express');
const path = require('path');
const app = express();// 设置视图文件夹路径和模板引擎
app.set('views', path.resolve(__dirname, 'views'));
app.set('view engine', 'ejs');// 渲染视图,并传递数据
app.get('/', (req, res) => {const data = { title: 'Hello EJS', message: 'Welcome to EJS!' };res.render('index', data);  // 将 data 对象传递给 'index.ejs'
});// 启动服务器
app.listen(3000, () => {console.log('Server is running on http://localhost:3000');
});

4. EJS模板语法

EJS 提供了许多功能来动态地生成 HTML 内容。以下是常用的 EJS 语法。

(1) 插值

EJS 允许在 HTML 中插入 JavaScript 变量。通过 <%= %> 标签可以把变量插入到页面中。

可以理解为在<%= %>标签中书写JS语句

const data = { title: 'Hello EJS', message: 'Welcome to EJS!' };
<h1><%= title %></h1>  <!-- 输出 title 的值 -->
<p><%= message %></p>  <!-- 输出 message 的值 -->

最终渲染的结果是:

<h1>Hello EJS</h1>
<p>Welcome to EJS!</p>

基于独立的HTML数据渲染:

<h1>Welcome, <%= username %>!</h1>
app.get("/", (req, res) => {res.render("index", { username: "Alice" });
});

通过键值对的形式传递变量 

示例:

const ejs = require("ejs");console.log("EJS 模块加载成功");let china = '国家';
console.log("变量定义成功");let result = ejs.render('我爱你 <%= country %>', { country: china });
console.log("模板渲染成功");console.log(result);

ejs.render对字符串模板进行渲染

模板 '我爱你 <%= country%>' 中的 <%= country %> 是 EJS 的插值语法,用于插入数据

{ country: china } 是传入的数据对象,键 country 的值为 '中国'

模板引擎会用传入对象中的 china 值替换模板中的 <%= country %>

​​ 

(2) 输出未经转义的 HTML

如果想要在页面中输出,不经过转义的HTML,(例如,插入一些 HTML 标签

<h2>Welcome</h2>

可以使用 <%- %> 语法 

<%- htmlContent %>  <!-- 输出 htmlContent 中的内容,不进行转义 -->

(3) 插入语法

<%%>中可插入js语法而不影响原有标签形式

如果users数组如下:

const users = [{ name: 'Alice' }, { name: 'Bob' }];
<ul><% users.forEach(function(user) { %><li><%= user.name %></li><% }) %>
</ul>

<%%>中插入js语法,意为遍历fruits数组,  针对遍历后的每一个数据,插入至标签<li>中

5. Express-generator 快速构建Express项目

Express-generator是一个方便的工具,用于快速生成基于 Express 框架的项目骨架结构。它通过命令行生成一个初始项目,包含基本的目录结构、模板文件和配置文件,开发者可以在此基础上快速开始开发。

npm install -g express-generator

 

生成项目

使用express命令生成一个项目,并指定使用EJS作为模板引擎:

express my-app --view=ejs
  • my-app 是项目名称,你可以更改为你喜欢的名字。
  • --view=ejs 表示选择 EJS 作为模板引擎

安装依赖

cd my-app
npm install

所生成的结构目录如下所示:

my-app/
├── app.js               // 应用入口文件
├── bin/
│   └── www              // 启动脚本
├── public/              // 静态文件目录 (CSS, JS, 图片等)
│   ├── images/
│   ├── javascripts/
│   └── stylesheets/
├── routes/              // 路由文件
│   ├── index.js         // 默认路由
│   └── users.js         // 用户相关路由
├── views/               // EJS 模板文件目录
│   ├── error.ejs        // 错误页面模板
│   └── index.ejs        // 首页模板
├── package.json         // 项目依赖和配置信息
└── README.md            // 项目说明文件

运行项目

启动开发服务器:

npm start


http://www.ppmy.cn/news/1564499.html

相关文章

CSS中样式继承+优先级

继承属性和非继承属性 一、定义及分类 1、继承属性是指在父元素上设置了这些属性后&#xff0c;子元素会自动继承这些属性的值&#xff0c;除非子元素显式地设置了不同的值。 常见的继承属性: 字体 font 系列文本text-align text-ident line-height letter-spacing颜色 col…

Ubuntu 开启 SMB 服务,并通过 windows 访问

背景资料 Ubuntu服务器折腾集Ubuntu linux 文件权限Ubuntu 空闲硬盘挂载到 文件管理器的 other locations Ubuntu开启samba和window共享文件 Ubuntu 配置 SMB 服务 安装 Samba 确保 Samba 已安装。如果未安装&#xff0c;运行以下命令进行安装&#xff1a; sudo apt upda…

面试题解析

1、写一个sed命令&#xff0c;修改/tmp/input.txt文件的内容 要求&#xff1a; 删除所有空行&#xff1b; 在非空行前面加一个"AAA"&#xff0c;在行尾加一个"BBB"&#xff0c;即将内容为11111的一行改为&#xff1a;AAA11111BBB 创造测试文件&#xff1a;…

计算机网络 | IP地址、子网掩码、网络地址、主机地址计算方式详解

关注&#xff1a;CodingTechWork 引言 在计算机网络中&#xff0c;IP地址、子网掩码和网络地址是构建网络通信的基本元素。无论是企业网络架构、互联网连接&#xff0c;还是局域网&#xff08;LAN&#xff09;配置&#xff0c;它们都起着至关重要的作用。理解它们的工作原理&a…

for循环语句题目

for循环&#xff1a; 1整数的个数 给定k(1<k<100)个正整数&#xff0c;其中每个数都是大于等于1&#xff0c;小于等于10的数。写程序计算给定的k个正整数中&#xff0c;1&#xff0c;5和10出现的次数。 #include <stdio.h> int main(){ int k,n; int sum0;…

es 3期 第24节-运用SQL简化DSL查询

#### 1.Elasticsearch是数据库&#xff0c;不是普通的Java应用程序&#xff0c;传统数据库需要的硬件资源同样需要&#xff0c;提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库&#xff0c;不是关系型数据库&#xff0c;不具备严格的ACID事务特性&#xff…

Windows 蓝牙驱动开发-BLE低功耗

蓝牙的版本为1.0 ~5.2版本&#xff0c;蓝牙1.0~3.0都是经典蓝牙(rfcomm)。而蓝牙4.0开始就是包括蓝牙BLE了。蓝牙4.0的蓝牙芯片都是双模的&#xff0c;既包括经典蓝牙也包括低能耗蓝牙。经典蓝牙和蓝牙BLE完全是两个东西&#xff0c;只是它们在底层上有一些相似的地方。蓝牙BLE…

SpringBoot开发——Spring Boot 3.3实现多端数据一致性的实时数据同步方案

文章目录 1、基于WebSocket的即时推送2、利用Kafka实现异步数据同步3、数据库变更监听与触发小结 在数字化浪潮下&#xff0c;业务横跨Web端、移动端&#xff0c;数据实时同步成了刚需。 Spring Boot 3.3携强大方案登场&#xff0c;为多端数据一致性难题精准“破局”。 1、基于…