日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

EJS + Express基本使用

發布時間:2024/3/13 javascript 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EJS + Express基本使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

EJS + Express基本使用

序:

在使用Node.js的Web框架Express時,經常會用到ejs作為模板引擎,使用Express+ejs主要是為了實現服務端渲染,利于SEO優化。所以,本篇博客僅僅是為了學習Express而寫的,在真實的項目開發中不推薦使用這種方式。

EJS 是一套模板語言,用普通的 JS 代碼生成 HTML 頁面,即嵌入式JS模板引擎。

一、準備工作

1、安裝ejs和express

npm install ejs npm i express

npm install ejs express nodemon -D

2、在views文件夾中新建一個ejs后綴的文件,在該文件里寫正常的HTML代碼

3、在app.js中設置默認模板引擎

app.set(“view engine”,“ejs”)

二、ejs語法(基于express搭建的后端環境)

1、方法

1.1、 template

編譯字符串得到模板函數。

let template = ejs.compile(str, options); template(data); // => 輸出渲染后的 HTML 字符串
  • str:需要解析的字符串模板
  • data:數據
  • option:配置選項

例子:

/* 書寫ejs */ let html = ejs.compile('<%=123 %>')(); /* 將寫好的ejs進行渲染 */ res.send(html);

1.2、 render

直接渲染字符串并生成HTML

ejs.render(str, data, options); // => 輸出渲染后的 HTML 字符串
  • str:需要解析的字符串模板
  • data:數據
  • option:配置選項

例子:

/* 書寫ejs */ let people = ['geddy', 'neil', 'alex'],html = ejs.render('<%= people.join(", "); %>', {people: people}); /* 將寫好的ejs進行渲染 */ res.send(html);

1.3、 renderFile

解析文件生成HTML

ejs.renderFile(filename, data, options, function(err, str){// str => 輸出渲染后的 HTML 字符串 });
  • str:需要解析的字符串模板
  • data:數據
  • option:配置選項

例子:

let people = ['geddy', 'neil', 'alex'],html = ejs.renderFile('./test.ejs', (err, str) => {res.send(str);});

1.4 、參數

上面3個方法中的options可以選擇的參數如下:

  • cache 緩存編譯后的函數,需要指定 filename。
  • filename 被 cache 參數用做鍵值,同時也用于 include 語句。
  • context 函數執行時的上下文環境。
  • compileDebug 當值為 false 時不編譯調試語句。
  • client 返回獨立的編譯后的函數。
  • delimiter 放在角括號中的字符,用于標記標簽的開與閉。
  • debug 將生成的函數體輸出。
  • _with 是否使用 with() {} 結構。如果值為 false,所有局部數據將存儲在 locals 對象上。
  • localsName 如果不使用 with ,localsName 將作為存儲局部變量的對象的名稱。默認名稱是 locals。
  • rmWhitespace 刪除所有可安全刪除的空白字符,包括開始與結尾處的空格。對于所有標簽來說,它提供了一個更安全版本的 -%> 標簽(在一行的中間并不會剔除標簽后面的換行符)。
  • escape 為 <%= 結構設置對應的轉義(escape)函數。它被用于輸出結果以及在生成的客戶端函數中通過 .toString() 輸出。(默認轉義 XML)。
  • outputFunctionName 設置為代表函數名的字符串(例如 'echo' 或 'print')時,將輸出腳本標簽之間應該輸出的內容。
  • async 當值為 true 時,EJS 將使用異步函數進行渲染。(依賴于 JS 運行環境對 async/await 是否支持)

2、標簽含義

  • <% ‘腳本’ 標簽,用于流程控制,無輸出。
  • <%_ 刪除其前面的空格符
  • <%= 輸出數據到模板(輸出是轉義 HTML 標簽)
  • <%- 輸出非轉義的數據到模板
  • <%# 注釋標簽,不執行、不輸出內容
  • <%% 輸出字符串 ‘<%’
  • %> 一般結束標簽
  • -%> 刪除緊隨其后的換行符
  • _%> 將結束標簽后面的空格符刪除

3、引入其它文件

通過 include 指令將相對于模板路徑中的模板片段包含進來。(需要提供 ‘filename‘ 參數。)

因為該項需要使用到fs所以只有在Node環境中才能生效,也就是說需要搭建一個Node后端服務器。

let people = ['geddy', 'neil', 'alex'],html = ejs.render(`<%- include('test.ejs') %>`, {filename: 'test.ejs'});

4、自定義分隔符

可針對單個模板或全局使用自定義分隔符:

let ejs = require('ejs'),users = ['geddy', 'neil', 'alex'];// 單個模板文件 ejs.render('<?= users.join(" | "); ?>', {users: users},{delimiter: '?'}); // => 'geddy | neil | alex'// 全局 ejs.delimiter = '$'; ejs.render('<$= users.join(" | "); $>', {users: users}); // => 'geddy | neil | alex'

5、 緩存

EJS 附帶了一個基本的進程內緩存,用于緩在渲染模板過程中所生成的臨時 JavaScript 函數。 通過 Node 的 lru-cache 庫可以很容易地加入 LRU 緩存:

let ejs = require('ejs'),LRU = require('lru-cache'); ejs.cache = LRU(100); // 具有 100 條內容限制的 LRU 緩存

如果要清除 EJS 緩存,調用 ejs.clearCache 即可。如果你正在使用的是 LRU 緩存并且需要設置不同的限額,則只需要將 ejs.cache 重置為 一個新的 LRU 實例即可。

6、自定義文件加載器

默認的文件加載器是 fs.readFileSync,如果你想要的自定義它, 設置ejs.fileLoader 即可。

let ejs = require('ejs'); let myFileLoader = function (filePath) {return 'myFileLoader: ' + fs.readFileSync(filePath); };ejs.fileLoader = myFileLoad;

使用此功能,您可以在讀取模板之前對其進行預處理。

7、布局(Layouts)

EJS 并未對塊(blocks)提供專門的支持,但是可以通過 包含頁眉和頁腳來實現布局,如下所示:

<%- include('header'); -%> <h1>Title </h1> <p>My page </p> <%- include('footer'); -%>

三、簡單搭建一個復用模塊

建一個views文件,下面有

  • header.ejs
  • footer.ejs
  • index.ejs
  • login.ejs

header.ejs

<h1>這是頭部</h1>

footer.ejs

<h1>這是尾部</h1>

index.ejs

<!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><%- include("header")%><p><%= name %></p><!-- 商品列表頁面 --><ul><% for (let i = (page-1)*4;i < page*4;i++) {%><li><%= arr[i] %></li> <%} %></ul><p>當前頁碼為:<%= page %></p><% if(page == 1){ %>當前是首頁<% }else if(page == 2){ %>當前是尾頁<% }else{ %>當前頁碼有問題<% } %><%- include("footer")%> </body> </html>

login.ejs

<!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><%- include("header") %> 歡迎來到登錄頁<%- include("footer") %> </body> </html>

建一個入口函數app.js

const express = require('express') const app = express() const port = 3000//設置默認使用的模板引擎 app.set("view engine","ejs");app.get("/list",(req,res)=>{//分頁效果let {page} = req.query;let arr = ["華為Mate40Pro","華為Mate40RS","華為P40","華為P40 pro","華為 nova9","華為 暢享20e","華為 nova9 pro","華為 nova7",]res.render("index",{name:"lisi",arr,page}); }) app.get("/login",(req,res)=>{res.render("login"); }) app.get('/', (req, res) => res.send('Hello World!')) app.listen(port, () => console.log(`Example app listening on port ${port}!`))

運行app.js,在瀏覽器中輸入相應的路由,即可。

四、總結:

在Nodejs搭建的后端中可能會用到EJS,但是前端項目一般不會使用EJS。

EJS最方便的地方就是在于將項目給別人使用的時候,人家不用過多的去了解你的代碼,直接修改配置文件就可以達到自己想要的效果。比如說Hexo中的配置都集中在_config.yml這個文件中,你根本不需要去一行一行的瀏覽源代碼,就可以實現修改,達到你想要的效果。

參考:EJS官網

總結

以上是生活随笔為你收集整理的EJS + Express基本使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。