最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js 使用jade模板引擎的示例

 更新時間:2018年05月11日 11:19:38   作者:foruok  
本篇文章主要介紹了Node.js 使用jade模板引擎的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

安裝jade

npm install -g jade

執(zhí)行上面的命令,全局安裝。

Visitor網(wǎng)站

第1步,在myprojects目錄下創(chuàng)建一個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步,創(chuàng)建一個views目錄,在里面創(chuàng)建一個模板文件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)站。

最后呢,就可以在瀏覽器里訪問了,地址欄里輸入“http://localhost:3000”即可,刷新幾次,你可能會看到下面的界面:

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

express與模板引擎

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

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

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

Express配置jade

Express服務(wù)器的行為可以通過一些設(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è)置模板文件所在目錄,Visitor的代碼如下:

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

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

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

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

app.engine('jade', require('jade').__express);

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

本地對象

我們可以在模板文件里包含動態(tài)數(shù)據(jù),這些動態(tài)數(shù)據(jù)來自應(yīng)用程序。我們可以使用express對象的locals對象來存儲本地變量。下面的代碼就存儲了標題和訪問計數(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只在當前渲染的view內(nèi)有效,而app.locals是全局的。

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

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

  1. #{表達式}
  2. 標簽=表達式

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

title= title

title是jade用來定義HTML文檔title的標簽。

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

h1= title

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

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

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

jade引擎簡介

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

關(guān)于jade,有兩篇文章不錯,可以看看,https://cnodejs.org/topic/5368adc5cf738dd6090060f2http://m.fzitv.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有很多標簽,用于生成HTML對應(yīng)的標簽。比如html對應(yīng),head對應(yīng),body對應(yīng),p對應(yīng),title對應(yīng),這也是我們的index.jade用到的所有標簽了。通常我們在HTML里使用的標簽寫法,去掉尖括號就成了jade里可用的標簽,比如對應(yīng)jade里的div。

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

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

測試jade模板文件

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

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

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

jade xxx.jade

執(zhí)行上面的命令,就會在當前目錄下生成一個與模板文件同名的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
 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文件,內(nèi)容如下:

<!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}} &amp; {{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="增加")

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Node.js中.pfx后綴文件的處理方法

    Node.js中.pfx后綴文件的處理方法

    這篇文章主要介紹了Node.js中.pfx后綴文件的處理方法,文中介紹的很詳細,對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • node實現(xiàn)爬蟲的幾種簡易方式

    node實現(xiàn)爬蟲的幾種簡易方式

    這篇文章主要給大家介紹了關(guān)于node實現(xiàn)爬蟲的幾種簡易方式,文中通過示例代碼介紹的非常詳細,對大家學(xué)習或者使用node具有一定的參考學(xué)習價值,需要的朋友們下面來一起學(xué)習學(xué)習吧
    2019-08-08
  • 詳解nodejs微信公眾號開發(fā)——4.自動回復(fù)各種消息

    詳解nodejs微信公眾號開發(fā)——4.自動回復(fù)各種消息

    這篇文章主要介紹了詳解nodejs微信公眾號開發(fā)——4.自動回復(fù)各種消息,非常具有實用價值,需要的朋友可以參考下
    2017-04-04
  • nodeJS進程管理器pm2的使用

    nodeJS進程管理器pm2的使用

    這篇文章主要介紹了nodeJS進程管理器pm2的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 詳解Node.js中單線程限制的有效解決方法

    詳解Node.js中單線程限制的有效解決方法

    Node.js?是一個基于事件驅(qū)動、非阻塞?I/O?模型的?JavaScript?運行時環(huán)境,特別適合構(gòu)建高并發(fā)的網(wǎng)絡(luò)應(yīng)用,本文介紹了幾種解決?Node.js單線程限制的方法,希望對大家有所幫助
    2024-12-12
  • 詳解如何使用nvm管理Node.js多版本

    詳解如何使用nvm管理Node.js多版本

    這篇文章主要介紹了詳解如何使用nvm管理Node.js多版本,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • Node.js系列之發(fā)起get/post請求(2)

    Node.js系列之發(fā)起get/post請求(2)

    這篇文章主要為大家詳細介紹了Node.js系列之發(fā)起get/post請求,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 使用nvm切換node版本的實現(xiàn)方法

    使用nvm切換node版本的實現(xiàn)方法

    我們在工作中可能會碰到這樣的情況:一個人要負責多個項目的維護,而項目中的插件又各有不同,插件下載所需的node版本可能也不同,所以只有一個node版本是無法滿足工作需求的,所以就有了nvm,volta等node版本管理工具,在本節(jié)將介紹nvm的使用方法
    2023-10-10
  • 一文詳解NPM如何換源

    一文詳解NPM如何換源

    在每一次的實際開發(fā)過程中我們都會下載相關(guān)的依賴包,最官方的是 npm,但是該服務(wù)器對于國內(nèi)開發(fā)者來說,下載起來是比較慢的,所以我們需要換源,下面這篇文章主要給大家介紹了關(guān)于NPM如何換源的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 在Node.js應(yīng)用程序中處理大數(shù)的操作指南

    在Node.js應(yīng)用程序中處理大數(shù)的操作指南

    在JavaScript生態(tài)系統(tǒng)中,你可以使用BigInt來處理大整數(shù),但是,你也可以使用具有類似于BigInt功能的第三方庫,本文將是使用BigInt和提供類似功能的流行庫管理大數(shù)的完整指南,我們還將比較第三方庫的用例、優(yōu)勢和劣勢
    2023-06-06

最新評論

舞钢市| 阿克陶县| 安阳市| 镇巴县| 陆丰市| 张掖市| 福海县| 陇南市| 白朗县| 洪雅县| 慈利县| 乐东| 高青县| 临泽县| 稷山县| 得荣县| 宜昌市| 镇坪县| 七台河市| 菏泽市| 拜泉县| 常德市| 吉林市| 安龙县| 时尚| 丹巴县| 贵溪市| 黄石市| 南江县| 普定县| 日喀则市| 贡嘎县| 东乡族自治县| 马尔康县| 城步| 定襄县| 承德县| 平罗县| 宜兰市| 保德县| 和硕县|