Express Middlewares

Express 中的 Middleware(中介軟體)除了可以放在所有的routes之前,也可以放在route內部的path以及callbackFn之間。語法是:

app.METHOD(path, middlewareFn, callbackFn);

之前的課程有提過, Middleware中的callbackFn內可以有三個參數,分別為req, res, 以及next。若我們希望用middleware來處理錯誤,則可以改用包含四個參數的callbackFn。四個參數分別為:err, req, res, next (順序不能換)。

在try catch block內部,我們可以把catch()到的錯誤,用next()往middleware的方向傳送。此時,我們在express的app.use()所使用的callbackFn則需要四個參數: err, req, res, 以及next。

express.Router

隨著伺服器的擴大,routes的數量可能變得非常巨大。此時,將routes根據功能分類就變得相當重要。Express.js提供了express.Router的功能,讓我們可以將routes分門別類。express.Router的語法為: const express = require('express’);

const router = express.Router();

router.use(….);router.get('/', (req, res) => { res.send('Birds home page') });

module.exports = router;

在主要的controller內部,則可以寫: const birds = require('./birds’);

// ...

app.use('/birds', birds);

Cookies

Cookies 是伺服器傳送給瀏覽器,並在客戶端下次訪問同一網站時一同發回的一小段文字。 它幫助該網站保留使用者的偏好設置(例如登入賬號、語言、字體大小及其他設定),以便使用者再次訪問該網站或瀏覽該網站的不同網頁時無需重新填寫那些資料。Cookie會被放在客戶端的瀏覽器內部(例如,在Chrome瀏覽器內,點選Settings,點擊Privacy and security,再點擊Cookies and other site data,就可以看到所有的cookies)。

Cookies是以key-value pair的形式儲存於瀏覽器內的。每個Cookies都有綁定特定的網站。若網站A給我們一個cookie,則下次我們訪問網站A時,這組cookie也會被傳送到網站A的伺服器。在Express的伺服器程式碼當中,設定cookie的語法是:

res.cookie(key, value);

下次同個瀏覽器傳送HTTP request到我們的伺服器時,我們可以用*cookieParser()*這個middleware,之後就可以透過 req.cookies 這個屬性來獲取我們的伺服器曾經存在客戶端的資料。

image.png