Ejs模版引擎介绍,什么是模版引擎,什么是ejs,ejs基本用法

** EJS 模板引擎**,让你彻底搞明白什么是模板引擎、什么是 EJS、怎么用、语法、最佳实践等等:


📚 一、什么是模板引擎?

模板引擎是前后端分离之前的一种服务器端“渲染技术”。它的主要作用是:

将 HTML 页面和后端传递过来的数据结合起来,生成真正能展示给用户的 HTML 页面。

🛠️ 工作原理:

  1. 编写模板页面(包含 HTML 和变量占位符)
  2. 后端把数据传进去
  3. 模板引擎渲染成真正的 HTML 返回给浏览器

🎯 二、什么是 EJS?

EJS(Embedded JavaScript Templates) 是 Node.js 中使用广泛的模板引擎之一,和 HTML 长得很像,但支持 JavaScript 嵌入。

EJS 特点:

特点描述
JS 语法嵌入可以写原生 JavaScript 表达式和语句
HTML 格式友好看起来就是 HTML,不需要特殊缩进
灵活易学初学者也能很快上手

🚀 三、Express 中使用 EJS(从零开始)

1️⃣ 安装依赖

npm install express ejs

2️⃣ 创建基本目录结构

project/
├── views/         ← EJS 页面模板放这里
│   └── index.ejs
├── app.js         ← 主程序

3️⃣ 配置 Express 使用 EJS(app.js)

const express = require('express');
const app = express();
const port = 3000;// 设置 EJS 为视图引擎
app.set('view engine', 'ejs');// 设置视图文件目录(默认就是 'views',可省略)
app.set('views', './views');// 路由
app.get('/', (req, res) => {res.render('index', {title: '欢迎使用 EJS',username: '小红',skills: ['JavaScript', 'Vue', 'Node.js']});
});app.listen(port, () => {console.log(`服务已启动:http://localhost:${port}`);
});

4️⃣ 创建 EJS 页面 views/index.ejs

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title><%= title %></title>
</head>
<body><h1>你好,<%= username %> 👋</h1><p>你掌握的技能有:</p><ul><% skills.forEach(skill => { %><li><%= skill %></li><% }) %></ul>
</body>
</html>

🧪 四、EJS 语法大全(常用)

写法说明
<%= variable %>输出变量并自动转义(安全)
<%- html %>原样输出 HTML,不转义(慎用)
<% code %>执行 JS 代码(无输出)
<% if (...) { %> ... <% } %>条件判断
<% array.forEach(...) %>循环输出

📝 示例补充

<!-- 输出变量 -->
<p>用户名:<%= username %></p><!-- 条件语句 -->
<% if (username === 'admin') { %><p>欢迎管理员!</p>
<% } else { %><p>普通用户</p>
<% } %><!-- 输出 HTML(注意 XSS) -->
<%- '<strong>这是粗体</strong>' %>

🧩 五、模板复用(Layout)

虽然 EJS 本身不内置布局系统,但你可以用 <%- include('header') %> 来实现“模板片段复用”。

示例:

1. 创建公共头部:views/partials/header.ejs
<header><h1>网站导航</h1><hr/>
</header>
2. 主模板中引入
<!DOCTYPE html>
<html>
<head><title><%= title %></title>
</head>
<body><%- include('partials/header') %><p>主内容区</p></body>
</html>

📦 六、文件结构推荐(实战项目)

project/
├── views/
│   ├── partials/
│   │   └── header.ejs
│   ├── index.ejs
│   └── user.ejs
├── public/               ← 静态资源
│   └── css/style.css
├── routes/
│   └── user.js
├── app.js

💬 七、EJS 与前端分离框架的区别

项目EJS(SSR)Vue/React(SPA)
渲染方式服务端渲染客户端渲染
首屏加载✅ 快❌ 需加载 JS
SEO 支持✅ 好❌ 差(需 SSR)
动态交互性❌ 差(需刷新)✅ 很强
场景适合简单后台、CMS大型复杂前端应用

✅ 八、总结

  • EJS 是轻量、高效、易学的模板引擎。
  • 它适合用在中小型后台项目、管理平台。
  • 不建议用 EJS 做前端复杂交互(如 Vue/React 更合适)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025.4.21-2025.4.26学习周报

目录 摘要Abstract1 文献阅读1.1 模型架构1.1.1 动态图邻接矩阵的构建1.1.2 多层次聚合机制模块1.1.3 AHGC-GRU 1.2 实验分析 总结 摘要 在本周阅读的论文中&#xff0c;作者提出了一种名为AHGCNN的自适应层次图卷积神经网络。AHGCNN通过将监测站点视为图结构中的节点&#xf…

6.1 客户服务:智能客服与自动化支持系统的构建

随着企业数字化转型的加速&#xff0c;客户服务作为企业与用户交互的核心环节&#xff0c;正经历从传统人工服务向智能化、自动化服务的深刻变革。基于大语言模型&#xff08;LLM&#xff09;和智能代理&#xff08;Agent&#xff09;的技术为构建智能客服与自动化支持系统提供…

java Optional

我还没用过java8的一些语法&#xff0c;有点老古董了&#xff0c;记录下Optional怎么用。 从源码看&#xff0c;Optional内部持有一个对象&#xff0c; 有一些api对这个对象进行判空处理。 静态方法of &#xff0c;生成Optional对象&#xff0c; 但这个value不能为空&#…

【Java面试笔记:进阶】24.有哪些方法可以在运行时动态生成一个Java类?

在Java中,运行时动态生成类是实现动态编程、框架扩展(如AOP、ORM)和插件化系统的关键技术。 1.动态生成Java类的方法 1.从源码生成 直接生成源码文件:通过Java程序生成源码并保存为文件。编译源码: 使用ProcessBuilder启动javac进程进行编译。使用Java Compiler API(ja…

基于Jamba模型的天气预测实战

深入探索Mamba模型架构与应用 - 商品搜索 - 京东 DeepSeek大模型高性能核心技术与多模态融合开发 - 商品搜索 - 京东 由于大气运动极为复杂&#xff0c;影响天气的因素较多&#xff0c;而人们认识大气本身运动的能力极为有限&#xff0c;因此以前天气预报水平较低 。预报员在预…

GAMES202-高质量实时渲染(Real-Time Shadows)

目录 Shadow MappingshadowMapping的问题shadow mapping背后的数学PCF&#xff08;Percentage Closer Filtering&#xff09;PCSS&#xff08;Percentage closer soft shadows&#xff09;VSSM&#xff08;Variance Soft Shadow Mapping&#xff09;优化步骤3优化步骤1SAT&…

iphonex uniapp textarea标签兼容性处理过程梳理

嗨&#xff0c;我是小路。今天主要和大家分享的主题是“iphonex uniapp textarea标签兼容性处理过程梳理”。 在uniapp项目中&#xff0c;经常会使用到uniapp原生的textarea标签&#xff0c;但在手机兼容性这块&#xff0c;textarea并不是很好用&#xff0c;会出现一些…

C++ 区分关键字和标识符

1. 关键字&#xff08;Keywords&#xff09; 定义&#xff1a;关键字是编程语言预定义的具有特定意义的单词。它们是语言的一部分&#xff0c;C编译器具有特殊的理解规则&#xff0c;不能作为用户自定义的标识符。作用&#xff1a;关键字用于定义语言结构&#xff0c;如声明变…

杭电oj(1087、1203、1003)题解

DP 即动态规划&#xff08;Dynamic Programming&#xff09;&#xff0c;是一种通过把原问题分解为相对简单的子问题&#xff0c;并保存子问题的解来避免重复计算&#xff0c;从而解决复杂问题的算法策略。以下从几个方面简述动态规划&#xff1a; 基本思想 动态规划的核心在…

一键多环境构建——用 Hvigor 玩转 HarmonyOS Next

引言 在 HarmonyOS Next 的应用开发中&#xff0c;常常需要针对不同环境&#xff08;测试、预发、线上&#xff09;或不同签名&#xff08;调试、正式&#xff09;输出多个 APP/HAP 包。虽然 HarmonyOS 提供了多目标构建&#xff08;Multi-Target Build&#xff09;能力&#…

qt/c++云对象浏览器

简介 本项目为基于QT5和C11的云对象存储可视化管理工具 源码获取 int main(){ printf("源码联系绿泡泡:%s","joyfelic"); return 0; }

【Ubuntu】提升 docker ps -a 输出的可读性:让 Docker 容器状态更清晰

提升 docker ps -a 输出的可读性&#xff1a;让 Docker 容器状态更清晰 当我们使用 docker ps -a 查看所有 Docker 容器时&#xff0c;输出的信息通常会非常多&#xff0c;尤其是在容器数量较多时。默认输出中包含容器 ID、名称、镜像、状态、端口等信息&#xff0c;容易让人眼…

Spring Security自定义身份认证

尽管项目启动时&#xff0c;Spring Security会提供了默认的用户信息&#xff0c;可以快速认证和启动&#xff0c;但大多数应用程序都希望使用自定义的用户认证。对于自定义用户认证&#xff0c;Spring Security提供了多种认证方式&#xff0c;常用的有In-Memory Authentication…

在亚马逊云服务器上部署WordPress服务

在亚马逊云服务器上部署WordPress服务第一步&#xff1a;创建EC2实例第二步&#xff1a;初始设置与安装第三步&#xff1a;配置MySQL与WordPress第四步&#xff1a;配置Apache与WordPress第五步&#xff1a;访问WordPress第六步&#xff1a;测试数据库连接第七步&#xff1a;使…

Web3.0的认知补充(去中心化)

涉及开发技术&#xff1a; Vue Web3.js Solidity 基本认知 Web3.0含义&#xff1a; 新一代互联网思想&#xff1a;去中心化及用户为中心的互联网 数据&#xff1a;可读可写可授权 核心技术&#xff1a;区块链、NFT 应用&#xff1a;互联网上应用 NFT &…

如何修复宝可梦时时刻刻冒险无法正常工作

宝可梦的时时刻刻冒险模式是一项强大的功能&#xff0c;即使应用程序关闭&#xff0c;它也能追踪你的步行距离。它的工作原理是将你的步数与 iOS 上的 Apple Health 或 Android 上的 Google Fit 同步。它对于孵化宝可梦蛋和赚取好友糖果至关重要&#xff0c;但一旦它停止工作&a…

redis常用集合操作命令

在 Redis 的命令行界面&#xff08;redis-cli&#xff09;中&#xff0c; Redis 的集合&#xff08;Set&#xff09;是无序的&#xff0c;且集合中的元素是唯一的。Redis 本身没有直接提供获取集合中某个特定属性的命令&#xff0c;因为集合中的元素是简单的值&#xff0c;而不…

初识数据结构——二叉树从基础概念到实践应用

数据结构专栏 ⬅(click) 初识二叉树&#xff1a;从基础概念到实践应用&#x1f333; 一、树型结构基础 1.1 树的基本概念 树是一种非线性的数据结构&#xff0c;由n(n>0)个有限节点组成一个具有层次关系的集合。它看起来像一棵倒挂的树&#xff0c;根朝上而叶朝下。 关键特…

驼峰命名法(Camel Case)与匈牙利命名法(Hungarian Notation)详解

驼峰命名法&#xff08;Camel Case&#xff09;与匈牙利命名法&#xff08;Hungarian Notation&#xff09;详解及对比‌ ‌1. 驼峰命名法&#xff08;Camel Case&#xff09;‌ ‌定义‌ 驼峰命名法&#xff08;Camel Case&#xff09;是一种变量、函数、类等标识符的命名方…

keil 中优化等级的bug

一&#xff0c;问题描述 程序中代码有的执行&#xff0c;有的不执行&#xff0c;仔细研究&#xff0c;查询人工智能。 程序中printf打印后面的代码不执行&#xff0c; 然后过几十个函数又开始正常了。 二.分析问题 跳过函数一般又判断和Goto等语句&#xff0c;其它的溢出和错误…