国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 web前端 js教程 Node.js使用jade模板引擎步驟詳解

Node.js使用jade模板引擎步驟詳解

May 22, 2018 am 10:34 AM
javascript node.js

這次帶給大家Node.js使用jade模板引擎步驟詳解,Node.js使用jade模板引擎的注意事項有哪些,下面就是實戰(zhàn)案例,一起來看一下。

在「Node.js開發(fā)入門-Express安裝與使用」裡,我們曾經(jīng)使用express generator創(chuàng)建了一個HelloExpress網(wǎng)站,express工具為我們產(chǎn)生了基本的目錄結(jié)構(gòu)、模板、stylesheet、routers等。雖然那隻是一個簡單的HelloWorld類的小東西,但裡麵包含的內(nèi)容還是有些多了,為了更好的理解Express所支援的jade模板引擎的用法,我們這次提供一個手動創(chuàng)建的小網(wǎng)站,可以顯示來訪者的IP,並對訪問進(jìn)行計數(shù)。

安裝jade

npm?install?-g?jade

執(zhí)行上面的指令,全域安裝。

Visitor網(wǎng)站

第1步,在myprojects目錄下建立一個Visitor目錄。

第2步,把下面的程式碼保存在package.json檔案裡:

{
?"name":?"Visitor",
?"version":?"0.0.0",
?"private":?true,
?"dependencies":?{
?"express":?"~4.13.1",
?"jade":?"~1.11.0",
?}
}

這個json檔案描述了我們的Visitor網(wǎng)站的一些信息,最重要的部分是依賴。我們要使用express和jade。

var?express?=?require('express');
var?app?=?express();
var?counter?=?0;
//?view?engine?setup
app.set('views',?'./views');
app.set('view?engine',?'jade');
app.engine('jade',?require('jade').express);
app.get('/',?function(req,?res)?{
?counter++;
?app.locals.counter?=?counter.toString();
?res.render('index',?{ip:?req.ip});
});
app.listen(3000);
app.locals.title?=?"Welcome?to?Visitor";
app.locals.counter?=?"0";

app.js檔案是我們網(wǎng)站的入口。

第4步,建立一個views目錄,在裡面建立一個範(fàn)本檔案index.jade,內(nèi)容如下:

doctype?html
html
?head
?title=?title
?body
?h1=?title
?p?Hello,?#{ip}
?p?You're?the?#{counter}?visitor.

第5步,在Visitor目錄裡執(zhí)行“npm install”,安裝依賴。

第6步,在Visitor目錄裡執(zhí)行“node app.js”,啟動網(wǎng)站。

最後呢,就可以在瀏覽器裡訪問了,網(wǎng)址列裡輸入“http://localhost:3000”即可,刷新幾次,你可能會看到下面的介面:

這個簡單的Visitor網(wǎng)站,跟之前的HelloWorld、HelloExpress都不太一樣了,它有了一些動態(tài)的內(nèi)容。接下來我們就來看看這一切是如何發(fā)生的。

express與模板引擎

我在Visitor裡使用了jade模板引擎,類似的還有ejs以及很多,可以訪問這裡來了解:https://github.com/joyent/node/wiki/Modules。

範(fàn)本引擎使用範(fàn)本文件來動態(tài)產(chǎn)生HTML文件,在產(chǎn)生時又可以依照一定的規(guī)則將應(yīng)用程式裡的資料整合進(jìn)HTML檔。這樣,我們既避免了手動編寫HTML的繁瑣(相對使用模板而言),又能產(chǎn)生具有動態(tài)內(nèi)容的網(wǎng)頁。

Express和Jade結(jié)合得比較好,我們來看看怎麼配置它。

Express配置jade

Express伺服器的行為可以透過一些設(shè)定選項來控制,這些選項可以透過express物件的set(setting, value)、enable(setting)和disable(setting)來設(shè)定。具體支援哪些設(shè)置,可以看這裡http://expressjs.com/4x/api.html。我們的Visitor只用到了「view engine」和「views」。

「view engine」選項用來設(shè)定要使用的引擎,Visitor的程式碼如下:

app.set('view?engine',?'jade');

「views」選項用來設(shè)定範(fàn)本檔案所在目錄,Visitor的程式碼如下:

app.set('views',?'./views');

我在這裡簡單的使用了相對路徑,更好的做法是使用path模組,根據(jù)全域變數(shù)dirname來拼接。 dirname指目前正在執(zhí)行的腳本所在的目錄,對我們的Visitor範(fàn)例來講,就是app.js所在的那個目錄。程式碼可能是這樣的:

var?path?=?require('path');
path.join(dirname,?'views');

express預(yù)設(shè)會根據(jù)模板檔案的副檔名來使用對應(yīng)的引擎。對於*.jade文件,express內(nèi)部會呼叫下面的語句:

app.engine('jade',?require('jade').express);

所以,我們的app.js,實際上也可以去掉這行程式碼,結(jié)果是一樣的。

本地物件

我們可以在範(fàn)本檔案中包含動態(tài)數(shù)據(jù),這些動態(tài)數(shù)據(jù)來自應(yīng)用程式。我們可以使用express物件的locals物件來儲存本地變數(shù)。下面的程式碼就儲存了標(biāo)題和存取計數(shù):

app.locals.title?=?"Welcome?to?Visitor";
app.locals.counter?=?"0";

jade模板文件里可以直接訪問express對象的locals對象的屬性。我在app.js里設(shè)置的title和counter,在index.jade模板文件引用了它們。

現(xiàn)在我們來看這行代碼:

res.render('index',?{ip:?req.ip});

它調(diào)用express的Response對象的render方法來渲染模板文件,并且傳遞了一個本地對象。render方法原型:

res.render(view?[,?locals]?[,?callback])

res.render方法渲染一個view并且把渲染生成的HTML字符串發(fā)送給客戶端。res的API參考在這里http://expressjs.com/4x/api.html。

Response對象也有一個locals對象,它和app.locals的區(qū)別是,res的locals只在當(dāng)前渲染的view內(nèi)有效,而app.locals是全局的。

另外render方法的可選參數(shù)locals,也可以定義本地變量對象,傳遞給view。我在代碼里把ip傳了過去。

在jade文件里,常見的有兩種方式可以調(diào)用由應(yīng)用程序傳入的本地變量:

  1. #{表達(dá)式}

  2. 標(biāo)簽=表達(dá)式

前面的index.jade模板文件里,對于頁面標(biāo)題,我們這么用的:

title= title

title是jade用來定義HTML文檔title的標(biāo)簽。

對于body里的一級標(biāo)題,我們這么用的(h1是jade用來定義HTML一級標(biāo)題的標(biāo)簽):

h1= title

這都是屬于“標(biāo)簽=表達(dá)式”這種調(diào)用方式,這種方式通常用在一行jade代碼的開始,也就是標(biāo)簽開始的地方。而“#{表達(dá)式}”這種方式的好處是可以插入到j(luò)ade模板文件的任意地方。比如:

p?Hello,?#{ip}
p?You're?the?#{counter}?visitor.

我們也可以將“h1= title”修改為“h1 #{title}”,效果一樣。

jade引擎簡介

jade使用一些標(biāo)簽來標(biāo)記如何生成HTML,jade模板文件看起來很不像HTML文件,但它的模板文件小而整潔。使用jade,需要了解它都支持哪些標(biāo)簽,這個可以直接去看jade-lang,那里最詳細(xì)也最權(quán)威,我們這里只介紹index.jade文件用到的那些標(biāo)簽。

關(guān)于jade,有兩篇文章不錯,可以看看,https://cnodejs.org/topic/5368adc5cf738dd6090060f2和http://www.jb51.net/article/139936.htm,后面這篇文章是網(wǎng)友根號三寫的一個關(guān)于jade的系列文章的開篇,整個系列里的文章都值得一看。

HTML文檔的開始通常是文檔聲明,對應(yīng)到j(luò)ade模板文件里,就是doctype html。還有其它的文檔類型,比如xml,可以寫作doctype xml。更多請參考http://jade-lang.com/reference/doctype/。

jade有很多標(biāo)簽,用于生成HTML對應(yīng)的標(biāo)簽。比如html對應(yīng),head對應(yīng),body對應(yīng),p對應(yīng),title對應(yīng),這也是我們的index.jade用到的所有標(biāo)簽了。通常我們在HTML里使用的標(biāo)簽寫法,去掉尖括號就成了jade里可用的標(biāo)簽,比如對應(yīng)jade里的p。

HTML標(biāo)簽往往可以設(shè)置name、id、class等屬性,在jade里,是通過tag(attr=value)這種形式表示的。比如p(class=”view-container”),又比如input(type=”checkbox”)。

關(guān)于jade標(biāo)簽,這篇文章http://www.jb51.net/article/139942.htm說得很好,請參考。

測試jade模板文件

一開始用jade模板,記不全它的標(biāo)簽,也經(jīng)常不知道自己的寫的模板文件生成的html文檔是否正確。還好安裝jade后,有一個命令行工具jade,可以用來驗證模板文件。

jade的用法如下:jade [options] [dir|file …]

jade命令有很多選項,可以執(zhí)行“jade -h”查看。要驗證模板文件,最簡單的辦法就是使用jade工具生成為html文檔。命令如下:

jade?xxx.jade

執(zhí)行上面的命令,就會在當(dāng)前目錄下生成一個與模板文件同名的html文檔。不過格式很難讀,完全是一坨屎擠在一起。加上 -P(–pretty) 就好了。這樣:

jade?-P?xxx.jade

比如我們有這么一個使用了AngularJS的模板文件scope_template.jade,內(nèi)容如下:

doctype?html
html(ng-app="myApp")
?head
?title=?title
?link(rel='stylesheet',?href='/stylesheets/style.css')
?body
?p(ng-controller="SimpleTemplate")
?|?ValueA:?
?input(type="number"?ng-model="valueA")
?br
?|?ValueB:?
?input(type="number"?ng-model="valueB")
?br
?br
?|?Expression?Value:?{{valueA?+?valueB}}
?br
?br
?input(type="button"?ng-click="addValues(valueA,?valueB)"?value="Click?to?Add?Values?{{valueA}}?&?{{valueB}}")
?br
?|?Clicked?Value:?{{valueC}}
?br
?script(src="/javascripts/angular-1.4.3.min.js")
?script(src="/javascripts/scope_template.js")

運行“jade -P scope_template.jade”命令會生成scope_template.html文件,內(nèi)容如下:

<!DOCTYPE html>
<html ng-app="myApp">
?<head>
?<title></title>
?<link rel="stylesheet" href="/stylesheets/style.css" rel="external nofollow" >
?</head>
?<body>
?<p ng-controller="SimpleTemplate">ValueA:?
?<input type="number" ng-model="valueA"><br>ValueB:?
?<input type="number" ng-model="valueB"><br><br>Expression?Value:?{{valueA?+?valueB}}<br><br>
?<input type="button" ng-click="addValues(valueA, valueB)" value="Click to Add Values {{valueA}} & {{valueB}}"><br>Clicked?Value:?{{valueC}}<br>
?</p>
?<script src="/javascripts/angular-1.4.3.min.js"></script>
?<script src="/javascripts/scope_template.js"></script>
?</body>
</html>

需要提一下,我們既可以用jade編寫完整的HTML文檔,也可以編寫符合HTML語法的局部模板。比如下面的jade文件:

p(class="admin-user")
?p?添加用戶
?table
?tr
?td
?label?用戶名:
?td
?input(type="text"?name="add_username")
?tr
?td
?label?密碼:
?td
?input(type="text"?name="add_password")?
?tr
?td(colspan='2'?align="right")
?input(type="submit"?value="增加")

相信看了本文案例你已經(jīng)掌握了方法,更多精彩請關(guān)注php中文網(wǎng)其它相關(guān)文章!

推薦閱讀:

node前端模板引擎Jade標(biāo)簽使用詳解

nodeJS服務(wù)器創(chuàng)建與重啟操作代碼分享

以上是Node.js使用jade模板引擎步驟詳解的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

WebSocket與JavaScript:實現(xiàn)即時監(jiān)控系統(tǒng)的關(guān)鍵技術(shù) WebSocket與JavaScript:實現(xiàn)即時監(jiān)控系統(tǒng)的關(guān)鍵技術(shù) Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現(xiàn)即時監(jiān)控系統(tǒng)的關(guān)鍵技術(shù)引言:隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,即時監(jiān)控系統(tǒng)在各個領(lǐng)域中得到了廣泛的應(yīng)用。而實現(xiàn)即時監(jiān)控的關(guān)鍵技術(shù)之一就是WebSocket與JavaScript的結(jié)合使用。本文將介紹WebSocket與JavaScript在即時監(jiān)控系統(tǒng)中的應(yīng)用,並給出程式碼範(fàn)例,詳細(xì)解釋其實作原理。一、WebSocket技

如何使用WebSocket和JavaScript實現(xiàn)線上語音辨識系統(tǒng) 如何使用WebSocket和JavaScript實現(xiàn)線上語音辨識系統(tǒng) Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現(xiàn)線上語音辨識系統(tǒng)引言:隨著科技的不斷發(fā)展,語音辨識技術(shù)已成為了人工智慧領(lǐng)域的重要組成部分。而基於WebSocket和JavaScript實現(xiàn)的線上語音辨識系統(tǒng),具備了低延遲、即時性和跨平臺的特點,成為了廣泛應(yīng)用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現(xiàn)線上語音辨識系

如何利用JavaScript和WebSocket實現(xiàn)即時線上點餐系統(tǒng) 如何利用JavaScript和WebSocket實現(xiàn)即時線上點餐系統(tǒng) Dec 17, 2023 pm 12:09 PM

如何利用JavaScript和WebSocket實現(xiàn)即時線上點餐系統(tǒng)介紹:隨著網(wǎng)路的普及和技術(shù)的進(jìn)步,越來越多的餐廳開始提供線上點餐服務(wù)。為了實現(xiàn)即時線上點餐系統(tǒng),我們可以利用JavaScript和WebSocket技術(shù)。 WebSocket是一種基於TCP協(xié)定的全雙工通訊協(xié)議,可實現(xiàn)客戶端與伺服器的即時雙向通訊。在即時線上點餐系統(tǒng)中,當(dāng)使用者選擇菜餚並下訂單

JavaScript與WebSocket:打造高效率的即時天氣預(yù)報系統(tǒng) JavaScript與WebSocket:打造高效率的即時天氣預(yù)報系統(tǒng) Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的即時天氣預(yù)報系統(tǒng)引言:如今,天氣預(yù)報的準(zhǔn)確性對於日常生活以及決策制定具有重要意義。隨著技術(shù)的發(fā)展,我們可以透過即時獲取天氣數(shù)據(jù)來提供更準(zhǔn)確可靠的天氣預(yù)報。在本文中,我們將學(xué)習(xí)如何使用JavaScript和WebSocket技術(shù),來建立一個高效的即時天氣預(yù)報系統(tǒng)。本文將透過具體的程式碼範(fàn)例來展示實現(xiàn)的過程。 We

如何使用WebSocket和JavaScript實現(xiàn)線上預(yù)約系統(tǒng) 如何使用WebSocket和JavaScript實現(xiàn)線上預(yù)約系統(tǒng) Dec 17, 2023 am 09:39 AM

如何使用WebSocket和JavaScript實現(xiàn)線上預(yù)約系統(tǒng)在當(dāng)今數(shù)位化的時代,越來越多的業(yè)務(wù)和服務(wù)都需要提供線上預(yù)約功能。而實現(xiàn)一個高效、即時的線上預(yù)約系統(tǒng)是至關(guān)重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預(yù)約系統(tǒng),並提供具體的程式碼範(fàn)例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進(jìn)行全雙工

簡易JavaScript教學(xué):取得HTTP狀態(tài)碼的方法 簡易JavaScript教學(xué):取得HTTP狀態(tài)碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學(xué):如何取得HTTP狀態(tài)碼,需要具體程式碼範(fàn)例前言:在Web開發(fā)中,經(jīng)常會涉及到與伺服器進(jìn)行資料互動的場景。在與伺服器進(jìn)行通訊時,我們經(jīng)常需要取得傳回的HTTP狀態(tài)碼來判斷操作是否成功,並根據(jù)不同的狀態(tài)碼來進(jìn)行對應(yīng)的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態(tài)碼,並提供一些實用的程式碼範(fàn)例。使用XMLHttpRequest

javascript如何使用insertBefore javascript如何使用insertBefore Nov 24, 2023 am 11:56 AM

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節(jié)點。這個方法需要兩個參數(shù):要插入的新節(jié)點和參考節(jié)點(即新節(jié)點將要插入的位置的節(jié)點)。

如何在JavaScript中取得HTTP狀態(tài)碼的簡單方法 如何在JavaScript中取得HTTP狀態(tài)碼的簡單方法 Jan 05, 2024 pm 01:37 PM

JavaScript中的HTTP狀態(tài)碼取得方法簡介:在進(jìn)行前端開發(fā)中,我們常常需要處理與後端介面的交互,而HTTP狀態(tài)碼就是其中非常重要的一部分。了解並取得HTTP狀態(tài)碼有助於我們更好地處理介面?zhèn)骰氐馁Y料。本文將介紹使用JavaScript取得HTTP狀態(tài)碼的方法,並提供具體程式碼範(fàn)例。一、什麼是HTTP狀態(tài)碼HTTP狀態(tài)碼是指當(dāng)瀏覽器向伺服器發(fā)起請求時,服務(wù)

See all articles