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

一巴元、前言

隨著前端業(yè)務(wù)的不斷發(fā)展,頁(yè)面交互邏輯的不斷提高剃允,讓數(shù)據(jù)和界面實(shí)現(xiàn)分離漸漸被提了出來(lái)。JavaScript的MVC思想也流行了起來(lái)齐鲤,在這種背景下斥废,基于node.js的模板引擎也隨之出現(xiàn)。

什么是模板引擎给郊?

它用于解析動(dòng)態(tài)數(shù)據(jù)和靜態(tài)頁(yè)面所生成的視圖文件牡肉,將原本靜態(tài)的數(shù)據(jù)變?yōu)閯?dòng)態(tài),快速地實(shí)現(xiàn)頁(yè)面交互淆九;

目前使用較廣的模板引擎有以下幾種:Jade / Pug统锤、EJS、Handlebars炭庙。

jade模板引擎

jade模板引擎相較于原來(lái)的html會(huì)顯得更加簡(jiǎn)潔饲窿,它將標(biāo)簽原本的"<>"符號(hào)去掉,用括號(hào)代替焕蹄,層級(jí)使用tab縮進(jìn)來(lái)分逾雄,并且也支持js語(yǔ)法;

二腻脏、jade的基本使用

安裝jade:

cnpm install jade --save

在程序中引入jade:

app.set('views',"public"); //設(shè)置視圖的對(duì)應(yīng)目錄

app.set("view engine","jade"); //設(shè)置默認(rèn)的模板引擎

app.engine('jade', require('jade').__express); //定義模板引擎

特定路由渲染:

app.use("/",function(req,res){

res.render("index.jade");

});

完整實(shí)例:

const express=require("express");

const jade=require("jade");

const fs=require('fs');

var app=express();

//引用jade

app.set('views',"public"); //設(shè)置視圖的對(duì)應(yīng)目錄

app.set("view engine","jade"); //設(shè)置默認(rèn)的模板引擎

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文件夾下:


jade地址

在執(zhí)行res.render時(shí),會(huì)自動(dòng)渲染public中的index.jade文件迹卢,之后轉(zhuǎn)換為HTML5進(jìn)行dom渲染顯示辽故。

三、jade基礎(chǔ)語(yǔ)法

1腐碱、jade對(duì)很多html操作進(jìn)行了簡(jiǎn)化誊垢,如下:

html

????head

????????style

????body

????????div(class="content")

????????????h1 正文

了解過(guò)html語(yǔ)句的,從結(jié)構(gòu)上一定會(huì)發(fā)現(xiàn)症见,它將原本的雙標(biāo)簽省略了喂走,尖括號(hào)也不見(jiàn)了,而層級(jí)的劃分則由縮進(jìn)實(shí)現(xiàn)谋作,默認(rèn)的芋肠,jade會(huì)把幾乎所有縮進(jìn)后的字母變?yōu)闃?biāo)簽(行內(nèi)元素)。以下代碼會(huì)變?yōu)椋?/p>

<html>

? ?<head>

? ? ? <style></style>

? ?</head>

? ?<body>

????????<div class="content">

????????????<h1>正文</h1>

????????</div>

? ?</body>

</html>

<div class="content"></div>也將用div(class="content")代表遵蚜,簡(jiǎn)化了代碼的書(shū)寫(xiě)帖池;

2奈惑、“|”符號(hào)的作用

有時(shí)我們想讓我們的標(biāo)簽成為文字,那么“|”成為了絕好的工具:

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

????| center

我們可以看到睡汹,他將center作為文字原封不動(dòng)的寫(xiě)入了html中肴甸,而不是作為一個(gè)標(biāo)簽渲染。

當(dāng)然我們用它來(lái)轉(zhuǎn)換js語(yǔ)句:

script

????| var cli = document.getElementById("content");

????| cli.onclick=function(){

????| alert("aaa");

????| }

他將會(huì)變?yōu)椋?/p>

<script>

? ? var cli = document.getElementById("content");

? ? cli.onclick=function(){

? ? ? ? alert("aaa");

? ? }

</script>

3囚巴、識(shí)別js語(yǔ)句:

可以通過(guò) script. 來(lái)識(shí)別js語(yǔ)法:

script.

????var cli = document.getElementById("content");

????cli.onclick=function(){

????????alert("aaa");

????}

他也會(huì)變?yōu)椋?/p>

<script>

? ? var cli = document.getElementById("content");

? ? cli.onclick=function(){

? ? ? ? alert("aaa");

? ? }

</script>

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

4彤叉、引入其他js文件:

想在jade的js標(biāo)簽中引入其他js文件庶柿?沒(méi)錯(cuò),它也支持秽浇。前提請(qǐng)確保他們?cè)谕晃募A下:


引入js

script

????include click.js

<script>var cli = document.getElementById("content");

????cli.onclick=function(){

? ? ? ???? alert("aaa");

????}

</script>

5浮庐、表達(dá)式

“-”允許我們直接寫(xiě)js語(yǔ)法,在變量調(diào)用時(shí)兼呵,通過(guò) #{a+b} 或 div=a+b 進(jìn)行:

html

????head

????body

????????-var a=10

????????-var b=20

????????div a+b為:#{a+b}

????????div=a+b

會(huì)得到:

<html>

????<head></head>

????<body>

????????<div>a+b為:30</div>

????????<div>30</div>

????</body>

</html>

6兔辅、for循環(huán):

"-"也可以用于循環(huán)語(yǔ)句的使用

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

類(lèi)似于switch case語(yǔ)句:

html

????head

????body

????????- var test = "漢子"

????????-var none = "無(wú)"

????????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>

類(lèi)似于switch case,只執(zhí)行when中與case對(duì)應(yīng)的代碼塊懂昂,在匹配后面用 : 來(lái)作為要執(zhí)行的代碼介时,后面跟上標(biāo)簽和對(duì)應(yīng)語(yǔ)句

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'}) 偶數(shù)

????????-else

????????????div(style={background:'#333',width:'100%',height:'20px',color: '#eee'}) 奇數(shù)

得到:

<html>

????<head></head>

????<body>

????????<div style="background:#eee;width:100%;height:20px;color:#333">? ? 偶數(shù)</div>

????????<div style="background:#333;width:100%;height:20px;color:#eee">? ? 奇數(shù)</div>

????????<div style="background:#eee;width:100%;height:20px;color:#333">? ? 偶數(shù)</div>

????????<div style="background:#333;width:100%;height:20px;color:#eee">? ? 奇數(shù)</div>

????????<div style="background:#eee;width:100%;height:20px;color:#333">? ? 偶數(shù)</div>

????????<div style="background:#333;width:100%;height:20px;color:#eee">? ? 奇數(shù)</div>

????????<div style="background:#eee;width:100%;height:20px;color:#333">? ? 偶數(shù)</div>

????????<div style="background:#333;width:100%;height:20px;color:#eee">? ? 奇數(shù)</div>

????????<div style="background:#eee;width:100%;height:20px;color:#333">? ? 偶數(shù)</div>

????????<div style="background:#333;width:100%;height:20px;color:#eee">? ? 奇數(shù)</div>

????????<div style="background:#eee;width:100%;height:20px;color:#333">? ? 偶數(shù)</div>

????????<div style="background:#333;width:100%;height:20px;color:#eee">? ? 奇數(shù)</div>

????</body>

</html>

9凌彬、style的寫(xiě)法:

在對(duì)style樣式進(jìn)行修改時(shí)沸柔,與script相同,也可使用 . 對(duì)其進(jìn)行編輯铲敛,之后對(duì)不同的標(biāo)簽在其后面加{}褐澎,大括號(hào)里寫(xiě)css語(yǔ)句1,并使用 ; 隔開(kāi)

html

????head

????????meta(charset="utf-8")

????????title jade測(cè)試頁(yè)面

????????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測(cè)試頁(yè)面</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的作用是對(duì)模塊的復(fù)用工三,當(dāng)重復(fù)代碼有不同內(nèi)容時(shí),起作用就來(lái)了:

- 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的一些常用語(yǔ)法先鱼,如果平常使用jade作為開(kāi)發(fā)俭正,那么這些是非常基礎(chǔ)的焙畔,也希望大家有所體會(huì)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掸读,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌儿惫,老刑警劉巖澡罚,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異肾请,居然都是意外死亡始苇,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)筐喳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人函喉,你說(shuō)我怎么就攤上這事避归。” “怎么了管呵?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵梳毙,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我捐下,道長(zhǎng)账锹,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任坷襟,我火速辦了婚禮奸柬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘婴程。我一直安慰自己廓奕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布档叔。 她就那樣靜靜地躺著桌粉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪衙四。 梳的紋絲不亂的頭發(fā)上铃肯,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音传蹈,去河邊找鬼押逼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛卡睦,可吹牛的內(nèi)容都是我干的宴胧。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼表锻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼恕齐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤显歧,失蹤者是張志新(化名)和其女友劉穎仪或,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體士骤,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡范删,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拷肌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片到旦。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖巨缘,靈堂內(nèi)的尸體忽然破棺而出添忘,到底是詐尸還是另有隱情,我是刑警寧澤若锁,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布搁骑,位于F島的核電站,受9級(jí)特大地震影響又固,放射性物質(zhì)發(fā)生泄漏仲器。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一仰冠、第九天 我趴在偏房一處隱蔽的房頂上張望乏冀。 院中可真熱鬧,春花似錦洋只、人聲如沸煤辨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)众辨。三九已至,卻和暖如春舷礼,著一層夾襖步出監(jiān)牢的瞬間鹃彻,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工妻献, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛛株,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓育拨,卻偏偏與公主長(zhǎng)得像谨履,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熬丧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5笋粟? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 27,453評(píng)論 1 45
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,146評(píng)論 0 3
  • 前端開(kāi)發(fā)面試題 面試題目: 根據(jù)你的等級(jí)和職位的變化,入門(mén)級(jí)到專(zhuān)家級(jí)害捕,廣度和深度都會(huì)有所增加绿淋。 題目類(lèi)型: 理論知...
    怡寶丶閱讀 2,574評(píng)論 0 7
  • 參考文檔 https://www.linuxidc.com/Linux/2017-09/146760.htmhtt...
    三杯水Plus閱讀 4,274評(píng)論 0 8
  • 醉臥陳?ài)E影幢幢,柳葉紛飛識(shí)雨香尝盼。 西風(fēng)不度燈下客吞滞,且教夏月把秋藏。
    公子燁1閱讀 222評(píng)論 0 0