Express middleware介紹

這篇來介紹 middleware,如果用比較白話的方式來介紹的話,就是類似守門員的概念
通常一個網站,某些頁面可能需要一些權限才能進去,例如: 已登入的狀態才能造訪
而 middleware(中介軟體),就會在使用者進入這些路由前,先進行驗證的動作 ~

簡單寫一個 middleware

先簡單寫一個 middleware

1
2
3
4
app.use(function(req, res, next) {
console.log('有人進來了');
next();
});

上述就是一個簡單的 middleware 的範例,middleware 通常比較重要的是擺放的位置,哪些路由需要經過驗證的就擺在它前面,相當於守門員擋在前面,而 next(); 也很重要,app.use() 內的 function 就算通過了,但是沒有加 next(); 守門員也不會放人,那只能有一位守門員嗎?
當然不只,一個路由前面可以有很多的 middleware,就看你想要驗證什麼了

假設想要在進來首頁時,先驗證有沒有登入,就可以這樣寫:

1
2
3
4
5
6
7
8
9
10
app.use(function(req, res, next) {
// 驗證登入的程式碼可以寫在這
console.log('已是登入狀態');
next();
});

// 前面驗證成功,就可以進到首頁
app.get('/', function() {
res.send('index');
})

重複利用的 middleware

假設我們登入的 function,會在很多地方都用到,那就可以改成這樣寫:

1
2
3
4
5
6
7
const login = function(req, res, next) {
// 驗證登入的程式碼可以寫在這
console.log('已是登入狀態');
next();
}

app.use(login);

除了上述的方式,也可以把 middleware 的 function 放在 app.get() 中間,如:

1
2
3
4
// 進到首頁後,會先進行 login 的 function,如果沒有通過,就不會執行後面的 function
app.get('/', login, function(req, res) {
res.send('index');
})

使用 app.use() 放置靜態檔案

如果要放置靜態檔案,例如:照片,這時候該怎麼放置?

1
2
// 從 public 資料夾取用靜態資源
app.use(express.static('public'))

記得新增 public 資料夾,接著就可以使用靜態檔案了