iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
0
自我挑戰組

從零開始的後端異世界生活系列 第 27

Day 27 - 臨時插播的中間件 - Middleware

中間件 - Middleware

嗨大家好,因為在部署 Elastic Beanstalk 上遇到了一些些困難,目前暫時卡關,怕文章生不出來,我們來臨時插播一下其他篇章,今天先來講中間件 - Middleware。

Middleware 看它的名字就知道,它喜歡插在別人的中間,就像胖虎一樣。

簡單來說,Middleware 是介於 Client 端與後端路由中間的一層或是多層 Function,而該 Functions 能存取 Request 與 Request 資訊,也可以透過 next() 來控制流程。

還是有點複雜,我們直接進入實作部分。

建立一個 Middleware

我們可以利用 CLI 指令來建立一個 Middleware,如下:

nest g mi ExampleMiddleware

而我想單獨放在一個 middleware 資料夾裡,故修改成 nest g mi middleware/ExampleMiddleware。

這樣子就建立完畢了:
https://ithelp.ithome.com.tw/upload/images/20201012/201196199Zas7GQFkV.png

而生成的檔案則是 Middleware 的基本程式碼架構:
https://ithelp.ithome.com.tw/upload/images/20201012/20119619q4GKQrlxab.png

套用 Middleware

生成 Middleware 之後,我們要在 Module 去設定 Middleware 的套用範圍(雖然我們還沒寫邏輯),我們來到 AppModule,先實作 NestModule 並建立 configure 方法:
https://ithelp.ithome.com.tw/upload/images/20201012/20119619vjqGGdW3Kz.png

之後在利用 Consumer 來選擇要執行哪個 Middleware 及執行範圍:
https://ithelp.ithome.com.tw/upload/images/20201012/20119619XIPEA47SCq.png

撰寫 Middleware 範例

那我們來寫寫 Middleware 範例,假設我想攔截 API 的回應(拿新增任務來測試),我們先寫下:
https://ithelp.ithome.com.tw/upload/images/20201012/201196190AgPuvWkOV.png

然後我們再去打打看 API,結果得到了什麼:
https://ithelp.ithome.com.tw/upload/images/20201012/20119619mCjpqk1lZL.png

其他還有很多種用法,例如攔截某個參數等於什麼的時候就做某件事,或者是利用 Logger 把 HTTP 相關的東西都給列印出來等等。

/*
本系列文係個人新手開發心得,可能會有許多錯誤,煩請多多包容不吝指教。
*/


上一篇
Day 26 - 部署 NestJS 到 AWS Elastic Beanstalk (1)
下一篇
Day 28 - 不想再寫 if 啦,來研究 NestJS 的 Pipe 看看
系列文
從零開始的後端異世界生活30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言