• <menu id="3qexa"></menu>
    \r\n?ValueA:?\r\n?
    ValueB:?\r\n?

    Expression?Value:?{{valueA?+?valueB}}

    \r\n?
    Clicked?Value:?{{valueC}}
    \r\n?<\/p>\r\n?

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

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

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

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

    這次給大家?guī)鞱ode.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工具為我們生成了基本的目錄結(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目錄下創(chuàng)建一個(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步,創(chuàng)建一個(gè)views目錄,在里面創(chuàng)建一個(gè)模板文件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)站。

    最后呢,就可以在瀏覽器里訪問了,地址欄里輸入“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。

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

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

    Express配置jade

    Express服務(wù)器的行為可以通過一些設(shè)置選項(xiàng)來控制,這些選項(xiàng)可以通過express對(duì)象的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è)置模板文件所在目錄,Visitor的代碼如下:

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

    我在這里簡(jiǎn)單的使用了相對(duì)路徑,更好的做法是使用path模塊,根據(jù)全局變量dirname來拼接。dirname指當(dāng)前正在執(zhí)行的腳本所在的目錄,對(duì)我們的Visitor示例來講,就是app.js所在的那個(gè)目錄。代碼可能是這樣的:

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

    express默認(rèn)會(huì)根據(jù)模板文件的擴(kuò)展名來使用對(duì)應(yīng)的引擎。對(duì)于*.jade文件,express內(nèi)部會(huì)調(diào)用下面的語句:

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

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

    本地對(duì)象

    我們可以在模板文件里包含動(dòng)態(tài)數(shù)據(jù),這些動(dòng)態(tài)數(shù)據(jù)來自應(yīng)用程序。我們可以使用express對(duì)象的locals對(duì)象來存儲(chǔ)本地變量。下面的代碼就存儲(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ì)于頁面標(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語法的局部模板。比如下面的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)文章!

    本站聲明
    本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系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脫衣機(jī)

    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)頁開發(fā)工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神級(jí)代碼編輯軟件(SublimeText3)

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

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

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

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

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

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

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

    JavaScript和WebSocket:打造高效的實(shí)時(shí)天氣預(yù)報(bào)系統(tǒng)引言:如今,天氣預(yù)報(bào)的準(zhǔn)確性對(duì)于日常生活以及決策制定具有重要意義。隨著技術(shù)的發(fā)展,我們可以通過實(shí)時(shí)獲取天氣數(shù)據(jù)來提供更準(zhǔn)確可靠的天氣預(yù)報(bào)。在本文中,我們將學(xué)習(xí)如何使用JavaScript和WebSocket技術(shù),來構(gòu)建一個(gè)高效的實(shí)時(shí)天氣預(yù)報(bào)系統(tǒng)。本文將通過具體的代碼示例來展示實(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í)時(shí)的在線預(yù)約系統(tǒng)是至關(guān)重要的。本文將介紹如何使用WebSocket和JavaScript來實(shí)現(xiàn)一個(gè)在線預(yù)約系統(tǒng),并提供具體的代碼示例。一、什么是WebSocketWebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工

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

    JavaScript教程:如何獲取HTTP狀態(tài)碼,需要具體代碼示例前言:在Web開發(fā)中,經(jīng)常會(huì)涉及到與服務(wù)器進(jìn)行數(shù)據(jù)交互的場(chǎng)景。在與服務(wù)器進(jìn)行通信時(shí),我們經(jīng)常需要獲取返回的HTTP狀態(tài)碼來判斷操作是否成功,根據(jù)不同的狀態(tài)碼來進(jìn)行相應(yīng)的處理。本篇文章將教你如何使用JavaScript獲取HTTP狀態(tài)碼,并提供一些實(shí)用的代碼示例。使用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)碼有助于我們更好地處理接口返回的數(shù)據(jù)。本文將介紹使用JavaScript獲取HTTP狀態(tài)碼的方法,并提供具體代碼示例。一、什么是HTTP狀態(tài)碼HTTP狀態(tài)碼是指當(dāng)瀏覽器向服務(wù)器發(fā)起請(qǐng)求時(shí),服務(wù)

    See all articles