自訂 Express 的 library (Node.js)

在開發一個 web 沒有一個 library 可以使用是非常痛苦的,而且未來的維護成本也會越來越高!!

假設今天要做一個 timeDiff,來顯示該時間與目前時間相差多久了

最簡單的方式就是直接寫下去拉!就像下面這樣:

1
Math.round((new Date() - new Date(article.lastUpdate)) / 1000 / 60 / 60 / 24)

這樣寫當然不好,完全無法 reuse,在許多地方都會有timeDiff的需求,難道每次都要再寫一次嗎?瘋了不成…

那要怎麼改呢?

直接在 view 裡面寫 function 嗎?很不好,這樣會讓 view 變得很醜,增加未來維護的成本

那麼該怎麼辦呢?

Express 有提供一個 function,app.locals,允許自定義

這個 function 允許透過下列方式定義與使用

1
2
3
4
5
6
7
8
9
10
11
12
app.locals({
title: 'My App',
phone: '1-250-858-9990',
});
app.locals.title
// => 'My App'
app.locals.email
// => [email protected]'

當然,在這邊只看的到定義變數而已,但是對於 JavaScript 有點涉略就會知道

其實是可以直接定義 function 的

所以 timeDiff 就可以寫成下面這樣

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
app.locals({
timeDiff: function(dateString) {
var day = 60 * 60 * 24,
hour = 60 * 60,
min = 60;
var diff = Math.round((new Date() - new Date(dateString)) / 1000);
if (diff >= day) {
return Math.round(diff / day) + " days ago";
} else if (diff >= hour) {
return Math.round(diff / hour) + " hours ago";
} else if (diff >= min) {
return Math.round(diff / min) + " minutes ago";
} else {
return " just few seconds";
}
}
});

透過這樣的定義之後,就可以在 view 裡面使用了,使用方式如下

1
timeDiff(article.lastUpdate)

這樣 code 是不是簡潔許多呢?

以上希望有幫助到剛開始寫 Express 的人