以前簡單瞭解過nodejs,以爲用nodejs來作個網站也太麻煩了,要本身拼html的字符串返回,這能作網站嘛?css
最近看到使用jade模板來開發,以爲挺新奇的,因而試了一把,也瞭解了一些特性,算是個新的開始吧。html
一、首先下載webstorm,百度一下,有綠色版。node
二、下載express模塊和jade模塊,就不詳細說了。而後新建一個項目,選擇nodejs express appweb
而後點擊建立便可,一個能夠運行的小栗子就誕生了。express
接下來就看看express和jade是怎麼相愛的吧。app
1 var express = require('express'); 2 var app = express(); 3 // view engine setup 4 app.set('views', path.join(__dirname, 'views')); 5 app.set('view engine', 'jade');
第一行代碼加載express模塊,而後執行,賦值給app變量webstorm
第四行代碼設置試圖的物理路徑學習
第五行代碼設置視圖引擎爲jade網站
而後看看路由相關的設置ui
var routes = require('./routes/index'); app.use('/', routes);
這兩行代碼設置了默認首頁的路由,即訪問地址:localhost:3000/時怎麼處理請求
接下來就看 routes文件夾下的index.js是怎麼處理這個請求的
1 var express = require('express'); 2 var router = express.Router(); 3 4 /* GET home page. */ 5 router.get('/', function(req, res, next) { 6 res.render('index', { title: 'Express', time:"2015-11-18" }); 7 }); 8 9 module.exports = router;
很簡單的幾行代碼,主要是看第五行和第六行代碼,當路由截取到localhost:3000 get請求後,根據index.jade模板來渲染頁面,並傳遞參數:title 和 time
在視圖中,須要注意兩個模板:index.jade 和 layout.jade
index.jade代碼:
1 extends layout 2 3 block content 4 h1= title 5 p(id='pid') Welcome to #{title} 6 div(class='contentDiv') #{time} 7 div asdfasdf
layout.jade代碼:
1 doctype html 2 html 3 head 4 title= title 5 link(rel='stylesheet', href='/stylesheets/style.css') 6 body 7 block content
layout就至關因而一個母版頁,定義一些公共部分的信息,例如頭信息,將內容部分空出來,讓子頁面去自定義,就使用block content的語法來定義自定義區域
index使用
extends layout
來使用母版頁,使用關鍵字後跟空格再跟普通字符串來顯示內容
例如:h1=title,向頁面寫入一個h1標籤,內容是index.js傳過來的title參數
標籤的嵌套使用縮進來體現:
到這一套基本的流程就差很少了。
可是遇到一個小問題,就是router的模塊定義是經過
1 module.exports = router;
來返回的,
那麼module.exports 和 exports又有什麼區別呢?
百度了一下,又本身作了一個實驗,作出了以下結論。
module.exports的定義以下:
1 module.exports = exports = {};
一、模塊最終返回給調用者的內容,或者說公開的內容是module.exports
二、當直接給module.exports指定值以後,不管你再怎麼改exports對象,module.exports都不會變。由於exports仍是指向{},而module.exports已經指向新的對象
三、當在頁面中不給module.exports指定值,而是隻給exports指定屬性,例如:exports.name = "張三",
那麼最後module.exports也會有name這個屬性,即module.exports.name = "張三"
四、若是給module.exports指定屬性,module.exports.name = "張三",
同時也給exports指定一個屬性,exports.age = 22,
那麼最後module.exports也會有age屬性,即:module.exports.age = 22
今天學習就到這啦