2024-07-13|閱讀時間 ‧ 約 26 分鐘

後端框架與API 開發(五) - Middleware-設定與管理

    ※ 什麼是Middleware (中介層)?

    Middleware 一般翻譯作「中間件」或是「中介軟體」,其實 Express 應用程式就是由一連串的 middleware 串連而成:

    • 從 request 進來到 response 回去會經過一系列的流程。
    • 這個流程會按照路由清單由上而下執行。
    • 可以用 app.use 來對所有的 request 進行前置處理;也可以用 app.get 或 app.post 等方法來篩選用特定 HTTP method 發送的請求。
    • 只要是會發生在這個 request-response 流程裡的程序,都叫做 middleware。
    raw-image

    ※ Middleware (中介層)舉例說明:

    你可以把 middleware 的運作想像成一個加工生產線:

    生產線上的員工協力把輸送進來的「原料」(request) 一步步處理加工,完成最後的「製成品」(response)。當一個 middleware 把事情做完之後,它就會呼叫 next() 把請求交給下一個 middleware 來處理。

    所以每一個 middleware function 都會帶三個參數:reqres、與 next,例如:

    app.use((req, res, next) => {
    // do something
    return next()
    })

    ※ Express Middleware 分類:

    • 應用程式層級:

    綁定到 app 物件的 middleware,被稱為應用程式層級的 middleware。它會在所有路由和路由器層級的 middleware 中運行。

    這種 middleware 可以被設定去處理每一個應用程式接收到的請求內容。例如,我們可以使用 app.use() 函數來指定一個或多個特定的 middleware 函數,這些函數將在每次請求時被調用。

    同樣地,我們也可以使用 app.get() 或 app.post() 來指定只在特定 HTTP 方法的請求時被調用的 middleware。簡單來說,應用程式層級的 middleware 就像是一個全局過濾器,它會在每次請求時先運行,然後根據需要進行處理或轉發請求。這讓我們可以在請求到達路由之前進行一些預處理,例如驗證、日誌記錄或其他任何我們需要的操作。

    • 路由器層級:

    使用 路由器層級的 middleware 時,我們會將它綁定到 express.Router() 的實例。它的工作方式與應用程式層級的 middleware 相同,但它只在該路由器的路由中運行。路由器層級的 middleware 就像是一個局部過濾器,它只對綁定到同一個 Router() 實例的路由有效。這意味著,如果你有一組相關的路由,你可以使用一個 Router() 實例來管理它們,並且可以使用路由器層級的 middleware 來對這些路由進行一些共同的預處理,例如驗證或日誌記錄。

    • 錯誤處理:

    錯誤處理 middleware主要工作是處理在其他 middleware 或路由處理函數中產生的錯誤。它的特點是有四個參數:errreqres 和 next,而不是通常的三個參數。當一個 middleware 函數呼叫了 next(err) 時,Express 會跳過剩下的所有非錯誤處理 middleware,並尋找下一個有四個參數的 middleware 函數,也就是錯誤處理 middleware。

    然後,Express 會將錯誤物件 err 傳遞給這個錯誤處理 middleware,讓它來處理這個錯誤。這種機制讓我們可以集中處理錯誤,並提供友好的錯誤訊息或進行錯誤修復。

    • 內建層級:

    有一些內建的 middleware 函數,這些函數可以幫助我們處理一些常見的任務。其中一個最常用的內建 middleware 是 express.static。透過 express.static(‘public’) 可以讀取,由我們自行建立的靜態檔案,包含 JavaScript 、 CSS 檔案。

    • 第三方層級:

    由第三方所撰寫的套件。我們可以透過 npm 下載並在我們的應用程式中使用這些套件。這些第三方 middleware 的最大好處是,它們可以幫助我們避免重複造輪子,讓我們可以直接引用他人的模組工具來解決我們的專案問題。例如,body-parser 是一個常用的第三方 middleware,它可以幫助我們解析 HTTP 請求的 body。另外,passport 是一個用於身份驗證的 middleware,而 morgan 是一個用於日誌記錄的 middleware。

    分享至
    成為作者繼續創作的動力吧!
    從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

    作者的相關文章

    奧莉薇走在成為後端工程師之路上 的其他內容

    你可能也想看

    發表回應

    成為會員 後即可發表留言
    © 2024 vocus All rights reserved.