提醒:由於看到這系列鐵人訂閱人數漸漸變多,標記一下這些內容是在「非常萌新時期」所寫,更多技術內容請參考我的 Github,歡迎跟我一起討論 ^ ^
接下來我們將繼續完成 Controller 的內容,賦予其真正的「動作指示」,來完成 request 的任務,並建立一個基本的 Template 告訴其該怎麼把資料呈現出來。而 request 的任務包括取得資料、寫入資料,這節的內容主打 取得 & 呈現 資料。
今天將著重於完成以上任務的前置學習:async模組、Pug template、moment 模組。
npm install async
(在前面測試時已安裝過)async.parallel(參數1,參數2)
:用以同時執行多個非同步動作。async.series(參數1,參數2)
:用於執行需要依照順序執行的非同步動作。async.waterfall(參數1,參數2)
:用於當每個動作需使用前一個動作的結果,並照順序執行。async.parallel(
// 參數1:(可以是 object、array)
{
one: function(callback) { ... },
two: function(callback) { ... },
...
},
// 參數2:
function(err, results) {
// results 等於一個 object 如:{one: one的結果, two: two的結果, ...}(參數1為 array ,則results為 array)
}
)
/* Pug: */
body
p
/* 等同於HTML: */
<body><p></p></body>
/* Pug: */
body
p
/* 等同於HTML: */
<body></body><p></p>
app.set()
設定 engine。()
緊接在 element 後面書寫,每個 attribute 可以 逗號 或 空格 隔開。meta(name='viewport' content='width=device-width initial-scale=1')
或
meta(name='viewport', content='width=device-width, initial-scale=1')
轉為 HTML 為:
<meta name="viewport" content="width=device-width, initial-scale=1" />
=
,則其後面的內容被視為 JS表達式。=
,則其後面的內容被視為 純文字。/* 定義變數A = 'C' */
h= A + 'B' /* 頁面顯示:CB */
h A + 'B' /* 頁面顯示:A + 'B' */
#{}
:以插入 escaped 的內容。!{}
:以插入 unescaped 的內容。#[]
:以插入 inline 的 element。/* 頁面顯示: '<a> escaped </a>'(純文字)*/
p #{'<a> escaped </a>'}
/* 頁面顯示: unescaped (為連結)*/
p !{'<a> unescaped </a>'}
/* 頁面顯示: 這是link ('link'為連結)*/
p 這是#[a link]
|
:用來顯示純文字,並與上一行在同等位置,但不會受上一行影響。 ul
li A
| 純文字
li B
ul
li C
| 純文字
頁面顯示:(|
後的字沒有圓點)if title
p 已經有 title 變數
else
p 不存在 title 變數
extends
:以輸入要用以延續的模板。block section_name
:用來標記從哪個地方銜接模板。/* A.pug: */
doctype html
html
head
body
block X
h Hello, World!
block Y
/* B.pug: */
extends A
block X
h1= title
p Welcome to #{title}
/* B 將成為: */
doctype html
html
head
body
h1= title
p Welcome to #{title}
npm install moment