邱敬幃 Pardn Chiu
目錄
標籤

服務端渲染 (SSR) 的救星!Pug 與 EJS

Node.js: JavaScript 的後端魔法 (7)

541次觀看 0收藏 後端開發 Nodejs 模板引擎
模板引擎是一種強大的工具,允許我們直接從後端動態生成 HTML並傳遞至前端顯示。
本篇會介紹模板引擎的概念,並演示如何在 Express 中使用兩種常見的模板引擎,Pug 和 EJS。

模板引擎的概念

模板引擎是一種將數據和模板結合以生成動態內容的工具。在 Express 中,模板引擎通常用於動態生成 HTML 頁面。例如以下的 Pug 模板示例:

  1. html
  2.   head
  3.     title My App
  4.   body
  5.     h1 Welcome to #{title}
  6.     p This is a page created by Pug.

這個模板中的#{title}是一個變數,在實際渲染時被替換為具體的值。

使用 Pug 或 EJS

Pug (以前稱為 Jade)

Pug是一種基於縮排的模板引擎,它使用簡潔的語法和縮排來定義 HTML 結構。下面是一個簡單的 Pug 範例:

  1. npm install pug
  1. // 設定視圖引擎為 Pug
  2. app.set("view engine", "pug");
  3. // 設定視圖文件夾的位置 (依據需求調整)
  4. app.set("views", path.join(__dirname, "views"));

views文件夾中創建一個名為index.pug的文件

  1. html
  2.   head
  3.     title My Pug Page
  4.   body
  5.     h1 Welcome to #{title}!
  6.     p #{message}
  7.     ul
  8.       - for (var i = 0; i < items.length; i++)
  9.         li #{items[i]}

Pug 的優勢之一是簡化了 HTML 的撰寫,減少了冗餘標籤和字符,使代碼更具可讀性。

EJS (Embedded JavaScript)

EJS 允許在 HTML 中嵌入 JavaScript 代碼,使你能夠以動態的方式生成 HTML。所以在代碼上跟趨近於 HTML,以下是一個簡單的 EJS 範例:

  1. npm install ejs
  1. // 設定視圖引擎為 EJS
  2. app.set("view engine", "ejs");
  3. // 設定視圖文件夾的位置 (依據需求調整)
  4. app.set("views", path.join(__dirname, "views"));

views文件夾中創建一個名為index.ejs的文件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.   <title>My EJS Page</title>
  5. </head>
  6. <body>
  7.     <h1>Welcome to <%= title %></h1>
  8.     <p><%= message %></p>
  9.     <ul>
  10.         <% for(var i = 0; i < items.length; i++) { %>
  11.             <li><%= items[i] %></li>
  12.         <% }; %>
  13.     </ul>
  14. </body>
  15. </html>

在這個例子中,<%= %>用於輸出 JavaScript 變數的值,而<% %>用於執行 JavaScript 代碼,例如for循環。

設定路由來渲染

最後,在我們的 Express 應用程式中添加一個路由以渲染模板:

  1. app.get("/", (req, res) => {
  2.     res.render("index", { 
  3.         title: "Home",
  4.         message: "Hello World.",
  5.         items: [
  6.             "item1",
  7.             "item2"
  8.         ]
  9.     });
  10. });

這個路由將渲染views文件夾中的index.pugindex.ejs,並將titlemessageitems作為變數傳遞給模板。


系列文章


相關連結