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

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

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

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

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

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

安裝jade

npm?install?-g?jade

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

Visitor網(wǎng)站

第1步,在myprojects目錄下建立一個(gè)Visitor目錄。

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

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

這個(gè)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步,建立一個(gè)views目錄,在裡面建立一個(gè)範(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”,啟動(dòng)網(wǎng)站。

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

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

express與模板引擎

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

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

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

Express配置jade

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

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

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

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

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

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

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

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

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

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

本地物件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

title= title

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

對(duì)于body里的一級(jí)標(biāo)題,我們這么用的(h1是jade用來定義HTML一級(jí)標(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引擎簡(jiǎn)介

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

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

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

jade有很多標(biāo)簽,用于生成HTML對(duì)應(yīng)的標(biāo)簽。比如html對(duì)應(yīng),head對(duì)應(yīng),body對(duì)應(yīng),p對(duì)應(yīng),title對(duì)應(yīng),這也是我們的index.jade用到的所有標(biāo)簽了。通常我們?cè)贖TML里使用的標(biāo)簽寫法,去掉尖括號(hào)就成了jade里可用的標(biāo)簽,比如對(duì)應(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說得很好,請(qǐng)參考。

測(cè)試jade模板文件

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

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

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

jade?xxx.jade

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

jade?-P?xxx.jade

比如我們有這么一個(gè)使用了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")

運(yùn)行“jade -P scope_template.jade”命令會(huì)生成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語(yǔ)法的局部模板。比如下面的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)掌握了方法,更多精彩請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!

推薦閱讀:

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

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

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

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

JavaScript中的HTTP狀態(tài)碼取得方法簡(jiǎn)介:在進(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ā)起請(qǐng)求時(shí),服務(wù)

See all articles