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.pswp.cn/web/77462.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77462.shtml
英文地址,請注明出處:http://en.pswp.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;其它的溢出和錯誤…