您好,登錄后才能下訂單哦!
jade模板引擎如何在Node.js中使用?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
安裝jade
npm install -g jade
執行上面的命令,全局安裝。
Visitor網站
第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網站的一些信息,最重要的部分是依賴。我們要使用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文件是我們網站的入口。
第4步,創建一個views目錄,在里面創建一個模板文件index.jade,內容如下:
doctype html html head title= title body h2= title p Hello, #{ip} p You're the #{counter} visitor.
第5步,在Visitor目錄里執行“npm install”,安裝依賴。
第6步,在Visitor目錄里執行“node app.js”,啟動網站。
最后呢,就可以在瀏覽器里訪問了,地址欄里輸入“http://localhost:3000”即可,刷新幾次,你可能會看到下面的界面:
這個簡單的Visitor網站,和之前的HelloWorld、HelloExpress都不太一樣了,它有了一些動態的內容。接下來我們就來看看這一切是如何發生的。
express與模板引擎
我在Visitor里使用了jade模板引擎,類似的還有ejs以及很多,可以訪問這里來了解:https://github.com/joyent/node/wiki/Modules。
模板引擎使用模板文件來動態生成HTML文件,在生成時又可以按照一定的規則將應用程序里的數據整合進HTML文件。這樣,我們既避免了手動編寫HTML的繁瑣(相對使用模板而言),又能生成具有動態內容的網頁。
Express和Jade結合得比較好,我們來看看怎么配置它。
Express配置jade
Express服務器的行為可以通過一些設置選項來控制,這些選項可以通過express對象的set(setting, value)、enable(setting)和disable(setting)來設置。具體支持哪些設置,可以看這里http://expressjs.com/4x/api.html。我們的Visitor只用到了“view engine”和“views”。
“view engine”選項用來設置要使用的引擎,Visitor的代碼如下:
app.set('view engine', 'jade');
“views”選項用來設置模板文件所在目錄,Visitor的代碼如下:
app.set('views', './views');
我在這里簡單的使用了相對路徑,更好的做法是使用path模塊,根據全局變量__dirname來拼接。__dirname指當前正在執行的腳本所在的目錄,對我們的Visitor示例來講,就是app.js所在的那個目錄。代碼可能是這樣的:
var path = require('path'); path.join(__dirname, 'views');
express默認會根據模板文件的擴展名來使用對應的引擎。對于*.jade文件,express內部會調用下面的語句:
app.engine('jade', require('jade').__express);
所以,我們的app.js,實際上也可以去掉這行代碼,結果是一樣的。
本地對象
我們可以在模板文件里包含動態數據,這些動態數據來自應用程序。我們可以使用express對象的locals對象來存儲本地變量。下面的代碼就存儲了標題和訪問計數:
app.locals.title = "Welcome to Visitor"; app.locals.counter = "0";
jade模板文件里可以直接訪問express對象的locals對象的屬性。我在app.js里設置的title和counter,在index.jade模板文件引用了它們。
現在我們來看這行代碼:
res.render('index', {ip: req.ip});
它調用express的Response對象的render方法來渲染模板文件,并且傳遞了一個本地對象。render方法原型:
res.render(view [, locals] [, callback])
res.render方法渲染一個view并且把渲染生成的HTML字符串發送給客戶端。res的API參考在這里http://expressjs.com/4x/api.html。
Response對象也有一個locals對象,它和app.locals的區別是,res的locals只在當前渲染的view內有效,而app.locals是全局的。
另外render方法的可選參數locals,也可以定義本地變量對象,傳遞給view。我在代碼里把ip傳了過去。
在jade文件里,常見的有兩種方式可以調用由應用程序傳入的本地變量:
#{表達式}
標簽=表達式
前面的index.jade模板文件里,對于頁面標題,我們這么用的:
title= title
title是jade用來定義HTML文檔title的標簽。
對于body里的一級標題,我們這么用的(h2是jade用來定義HTML一級標題的標簽):
h2= title
這都是屬于“標簽=表達式”這種調用方式,這種方式通常用在一行jade代碼的開始,也就是標簽開始的地方。而“#{表達式}”這種方式的好處是可以插入到jade模板文件的任意地方。比如:
p Hello, #{ip} p You're the #{counter} visitor.
我們也可以將“h2= title”修改為“h2 #{title}”,效果一樣。
jade引擎簡介
jade使用一些標簽來標記如何生成HTML,jade模板文件看起來很不像HTML文件,但它的模板文件小而整潔。使用jade,需要了解它都支持哪些標簽,這個可以直接去看jade-lang,那里最詳細也最權威,我們這里只介紹index.jade文件用到的那些標簽。
關于jade,有兩篇文章不錯,可以看看,https://cnodejs.org/topic/5368adc5cf738dd6090060f2和https://www.jb51.net/article/139936.htm,后面這篇文章是網友根號三寫的一個關于jade的系列文章的開篇,整個系列里的文章都值得一看。
HTML文檔的開始通常是文檔聲明,對應到jade模板文件里,就是doctype html。還有其它的文檔類型,比如xml,可以寫作doctype xml。更多請參考http://jade-lang.com/reference/doctype/。
jade有很多標簽,用于生成HTML對應的標簽。比如html對應,head對應,body對應,p對應,title對應,這也是我們的index.jade用到的所有標簽了。通常我們在HTML里使用的標簽寫法,去掉尖括號就成了jade里可用的標簽,比如對應jade里的div。
HTML標簽往往可以設置name、id、class等屬性,在jade里,是通過tag(attr=value)這種形式表示的。比如div(class=”view-container”),又比如input(type=”checkbox”)。
關于jade標簽,這篇文章https://www.jb51.net/article/139942.htm說得很好,請參考。
測試jade模板文件
一開始用jade模板,記不全它的標簽,也經常不知道自己的寫的模板文件生成的html文檔是否正確。還好安裝jade后,有一個命令行工具jade,可以用來驗證模板文件。
jade的用法如下:jade [options] [dir|file …]
jade命令有很多選項,可以執行“jade -h”查看。要驗證模板文件,最簡單的辦法就是使用jade工具生成為html文檔。命令如下:
jade xxx.jade
執行上面的命令,就會在當前目錄下生成一個與模板文件同名的html文檔。不過格式很難讀,完全是一坨屎擠在一起。加上 -P(–pretty) 就好了。這樣:
jade -P xxx.jade
比如我們有這么一個使用了AngularJS的模板文件scope_template.jade,內容如下:
doctype html html(ng-app="myApp") head title= title link(rel='stylesheet', href='/stylesheets/style.css') body div(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文件,內容如下:
<!DOCTYPE html> <html ng-app="myApp"> <head> <title></title> <link rel="stylesheet" href="/stylesheets/style.css" rel="external nofollow" > </head> <body> <div 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> </div> <script src="/javascripts/angular-1.4.3.min.js"></script> <script src="/javascripts/scope_template.js"></script> </body> </html>
需要提一下,我們既可以用jade編寫完整的HTML文檔,也可以編寫符合HTML語法的局部模板。比如下面的jade文件:
div(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="增加")
看完上述內容,你們掌握jade模板引擎如何在Node.js中使用的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。