Express全系列教程之(十):jade模板引擎

来源:https://www.cnblogs.com/lpxj-blog/archive/2019/05/01/10800102.html
-Advertisement-
Play Games

一、前言 隨著前端業務的不斷發展,頁面交互邏輯的不斷提高,讓數據和界面實現分離漸漸被提了出來。JavaScript的MVC思想也流行了起來,在這種背景下,基於node.js的模板引擎也隨之出現。 什麼是模板引擎? 它用於解析動態數據和靜態頁面所生成的視圖文件,將原本靜態的數據變為動態,快速地實現頁面 ...


一、前言

隨著前端業務的不斷發展,頁面交互邏輯的不斷提高,讓數據和界面實現分離漸漸被提了出來。JavaScript的MVC思想也流行了起來,在這種背景下,基於node.js的模板引擎也隨之出現。

什麼是模板引擎?

它用於解析動態數據和靜態頁面所生成的視圖文件,將原本靜態的數據變為動態,快速地實現頁面交互;
目前使用較廣的模板引擎有以下幾種:Jade / Pug、EJS、Handlebars。

jade模板引擎

jade模板引擎相較於原來的html會顯得更加簡潔,它將標簽原本的"<>"符號去掉,用括弧代替,層級使用tab縮進來分,並且也支持js語法;

 

二、jade的基本使用

安裝jade:

cnpm install jade --save

  在程式中引入jade:

app.set('views',"public");	//設置視圖的對應目錄
app.set("view engine","jade");		//設置預設的模板引擎
app.engine('jade', require('jade').__express);		//定義模板引擎

  特定路由渲染:

app.use("/",function(req,res){
	res.render("index.jade");
});

  完整實例:

const express=require("express");
const jade=require("jade");
const fs=require('fs');
var app=express();

//引用jade
app.set('views',"public");	//設置視圖的對應目錄
app.set("view engine","jade");		//設置預設的模板引擎
app.engine('jade', jade.__express);		//定義模板引擎

//獲取jade文件
var str=jade.renderFile("./public/index.jade",{pretty:true});
console.log(str);

app.use("/",function(req,res){
	res.render("index.jade");
});

app.listen(8080);

  由上面的app.set('views',"public");可知,這裡將jade文件放在了public文件夾下:

在執行res.render時,會自動渲染public中的index.jade文件,之後轉換為HTML5進行dom渲染顯示。

 

三、jade基礎語法

1、jade對很多html操作進行了簡化,如下:

html
	head
		style
	body
		div(class="content")
			h1 正文

  瞭解過html語句的,從結構上一定會發現,它將原本的雙標簽省略了,尖括弧也不見了,而層級的劃分則由縮進實現,預設的,jade會把幾乎所有縮進後的字母變為標簽(行內元素)。以下代碼會變為:

<html>
  <head>
    <style></style>
  </head>
  <body>
    <div class="content">
      <h1>正文</h1>
    </div>
  </body>
</html>

  <div class="content"></div>也將用div(class="content")代表,簡化了代碼的書寫;

2、“|”符號的作用

  有時我們想讓我們的標簽成為文字,那麼“|”成為了絕好的工具:

div(class="content",id="content")
  | center

  我們可以看到,他將center作為文字原封不動的寫入了html中,而不是作為一個標簽渲染。
  當然我們用它來轉換js語句:

script
	| var cli = document.getElementById("content");
	| cli.onclick=function(){
	|	alert("aaa");
	| }

  他將會變為:

<script>
    var cli = document.getElementById("content");
    cli.onclick=function(){
        alert("aaa");
    }
</script>

3、識別js語句:

  可以通過 script. 來識別js語法:

script.
	var cli = document.getElementById("content");
	cli.onclick=function(){
		alert("aaa");
	}

  他也會變為:

<script>
    var cli = document.getElementById("content");
    cli.onclick=function(){
        alert("aaa");
    }
</script>

  我們可以看到,相比於用 | 使用script. 更加方便快捷。

4、引入其他js文件:

想在jade的js標簽中引入其他js文件?沒錯,它也支持。前提請確保他們在同一文件夾下:

script
  include click.js

  得到:

<script>var cli = document.getElementById("content");
	cli.onclick=function(){
       		alert("aaa");
	}
</script>

5、表達式

“-”允許我們直接寫js語法,在變數調用時,通過 #{a+b} 或 div=a+b 進行:

html
	head
		
	body
		-var a=10
		-var b=20
		div a+b為:#{a+b}
		div=a+b

  會得到:

<html>
  <head></head>
  <body>
    <div>a+b為:30</div>
    <div>30</div>
  </body>
</html>

6、for迴圈:

"-"也可以用於迴圈語句的使用

html
	head
	
	body
		-var arr=0;
		-for(var i=5;i>arr;i--)
			div=i
		div the number = #{i}

  得到:

<html>
  <head></head>
  <body>
    <div>5</div>
    <div>4</div>
    <div>3</div>
    <div>2</div>
    <div>1</div>
    <div>the number = 0</div>
  </body>
</html>

7、case ,when

類似於switch case語句:

html
	head
	
	body
		- var test = "漢子"
		-var none = "無"
		div The word is #{test}
		case test
			when "a": div the when is a
			when "b": div the second is b
			when "漢子": div the Third is 漢子
			default: The words is #{none}

  得到:

<html>
  <head></head>
  <body>
    <div>The word is 漢子。</div>
    <div>the Third is 漢子</div>
  </body>
</html>

  類似於switch case,只執行when中與case對應的代碼塊,在匹配後面用 : 來作為要執行的代碼,後面跟上標簽和對應語句

8、if else條件判斷

html
	head
	
	body
		-for(var i=12;i>0;i--)
			-if(i%2==0)
				div(style={background:'#eee',width:'100%',height:'20px',color: '#333'})	偶數
			-else
				div(style={background:'#333',width:'100%',height:'20px',color: '#eee'})	奇數

  得到:

<html>
  <head></head>
  <body>
    <div style="background:#eee;width:100%;height:20px;color:#333">     偶數</div>
    <div style="background:#333;width:100%;height:20px;color:#eee">     奇數</div>
    <div style="background:#eee;width:100%;height:20px;color:#333">     偶數</div>
    <div style="background:#333;width:100%;height:20px;color:#eee">     奇數</div>
    <div style="background:#eee;width:100%;height:20px;color:#333">     偶數</div>
    <div style="background:#333;width:100%;height:20px;color:#eee">     奇數</div>
    <div style="background:#eee;width:100%;height:20px;color:#333">     偶數</div>
    <div style="background:#333;width:100%;height:20px;color:#eee">     奇數</div>
    <div style="background:#eee;width:100%;height:20px;color:#333">     偶數</div>
    <div style="background:#333;width:100%;height:20px;color:#eee">     奇數</div>
    <div style="background:#eee;width:100%;height:20px;color:#333">     偶數</div>
    <div style="background:#333;width:100%;height:20px;color:#eee">     奇數</div>
  </body>
</html>

9、style的寫法:

在對style樣式進行修改時,與script相同,也可使用 . 對其進行編輯,之後對不同的標簽在其後面加{},大括弧里寫css語句1,並使用 ; 隔開

html
	head
		meta(charset="utf-8")
		title jade測試頁面
		style.
			body{margin:0;padding:0}
			div
			{width: 100px;height: 100px;background: #ccc;text-align: center;line-height: 100px;margin: 10px auto}
			div.last{clear:left}
	body
		-var a=0;
		while a<12
			if a%2==0 && a!=0
				div.last=a++
			else
				div=a++

  得到:

<html>
  <head>
    <meta charset="utf-8"/>
    <title>jade測試頁面</title>
    <style>
      body{margin:0;padding:0}
      div
      {width: 100px;height: 100px;background: #ccc;text-align: center;line-height: 100px;margin: 10px auto}
      div.last{clear:left}
    </style>
  </head>
  <body>
    <div>0</div>
    <div>1</div>
    <div class="last">2</div>
    <div>3</div>
    <div class="last">4</div>
    <div>5</div>
    <div class="last">6</div>
    <div>7</div>
    <div class="last">8</div>
    <div>9</div>
    <div class="last">10</div>
    <div>11</div>
  </body>
</html>

10、Mixin

Mixin的作用是對模塊的復用,當重覆代碼有不同內容時,起作用就來了:

- var num = 0;
mixin node
    div The number in mixin node is #{num++}
+node()
+node()
+node()
div At last, the number in mixin node is #{num++}

  得到:

<div>The number in mixin node is 0</div>
<div>The number in mixin node is 1</div>
<div>The number in mixin node is 2</div>
<div>At last, the number in mixin node is 3</div>

以上則是jade的一些常用語法,如果平常使用jade作為開發,那麼這些是非常基礎的,也希望大家有所體會


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux 編寫安全巡檢腳本 檢測/etc/passwd,/etc/shadow文件是否鎖定 檢測/etc/login.defs配置文件中密碼有效期設置是否得當 檢查所有用戶賬戶(非系統賬戶)中是否存在密碼永久有效問題(檢查/etc/shadow文件每一行中的密碼期限值) 檢查系統預設歷史命令記錄條 ...
  • 1 hadoop概述 1.1 為什麼會有大數據處理 1 hadoop概述 1.1 為什麼會有大數據處理 傳統模式已經滿足不了大數據的增長 1)存儲問題 傳統資料庫:存儲億級別的數據,需要高性能的伺服器;並且解決不了本質問題;只能存結構化數據 大數據存儲:通過分散式存儲,將數據存到一臺機器的同時,還可 ...
  • 正常從官網下載,並且正常安裝,直到安裝完成。然後用navicate連接,發現報錯信息如下所示Client does not support authentication protocol requested by server; consider upgrading MySQL clientbing ...
  • 概述 本lab將實現一個鎖管理器,事務通過鎖管理器獲取鎖,事務管理器根據情況決定是否授予鎖,或是阻塞等待其它事務釋放該鎖。 背景 事務屬性 眾所周知,事務具有如下屬性: 1. 原子性:事務要麼執行完成,要麼就沒有執行。 2. 一致性:事務執行完畢後,不會出現不一致的情況。 3. 隔離性:多個事務併發 ...
  • 一起學Android之Handler,簡單介紹Handler的相關知識點以及初步應用,僅供學習分享使用。 ...
  • NSProxy需要實現哪些方法?為什麼 - forwardingTargetForSelector: 被註釋了? ...
  • 本文同步自http://javaexception.com/archives/77 背景: 在上一篇文章中,給出了一種複製QQ效果的方案,今天就來講講換一種方式實現。主要依賴的是一個開源項目https://github.com/shangmingchao/PopupList。 解決辦法: Popup ...
  • [TOC] 註冊博客園賬號有一個多月了, 一直想優化一下自己的博客頁面. 在首頁瀏覽時候發現一位博主的頁面挺乾凈整潔的, 而且他分享了製作的思路, 於是下定決心美化一番. 本文將介紹美化的思路, 並貼上所有代碼, 俗話說授之以魚也要授之以漁. 一. 感謝熱心博主分享的攻略 致謝要寫在前面, 這位博主 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...