1. Module Module是NestJS 的基本組織單位。 模塊系統基於 Node.js 的 CommonJS 模塊系統,但提供了更高級別的抽象和組織方式。通過使用模塊,你可以將應用程式拆分成多個獨立且可復用的部分,每個模塊都負責實現特定的功能或業務邏輯。 模塊可以封裝相關的代碼、配置和依賴關 ...
1. Module
Module是NestJS 的基本組織單位。
模塊系統基於 Node.js 的 CommonJS 模塊系統,但提供了更高級別的抽象和組織方式。通過使用模塊,你可以將應用程式拆分成多個獨立且可復用的部分,每個模塊都負責實現特定的功能或業務邏輯。
模塊可以封裝相關的代碼、配置和依賴關係,使得模塊內部的實現細節對外不可見,只暴露必要的介面和功能。
模塊之間可以定義明確的依賴關係,通過導入(imports)其他模塊來獲取所需的功能和服務。這有助於管理複雜應用程式中的依賴關係,確保組件之間的正確交互。
可以使用 @Module()
裝飾器來定義一個模塊,併在裝飾器的元數據中指定模塊的提供者、控制器、導入的模塊等。這樣,NestJS 就可以根據這些信息來構建和管理應用程式的模塊結構。
2. Provider
Provider是基於依賴註入的概念(Dependency Injection,簡稱DI)
是一種實現控制反轉(Inversion of Control,簡稱IoC)的設計模式。
基本思想是解耦,通過外部框架,將類所依賴的對象(Provider)註入到類中,使得類在運行時動態地獲取其所依賴的對象實例,從而實現松耦合。而不是硬編碼方式直接關聯在一起。
在 NestJS 中,你通常在模塊的 @Module
裝飾器的 providers
數組中註冊提供者。這告訴 NestJS 該模塊提供了哪些服務或值,並且這些提供者可以在該模塊的作用域內被註入到其他類中。同時,如果你需要將提供者導出到其他模塊使用,你可以在 exports
數組中指定它們。
可以通過裝飾器(如 @Injectable()
)和構造函數參數來聲明和註入依賴關係,NestJS 會在運行時自動解析這些依賴關係,並將相應的實例註入到類中。
3.Middleware
Middleware實際上是一個函數,它可以在請求或響應對象上執行某些操作,或者在傳遞給下一個處理程式之前進行預處理。這些Middleware函數在請求的處理過程中,按照定義的順序依次執行,形成了一個類似洋蔥模型的層層包裹和處理的結構。
4. Guards(守衛):
通常用於身份驗證、角色檢查或許可權驗證。
是最先執行的中間件,用於確定是否允許請求繼續處理。(在請求還沒到控制器之前執行)
5. Interceptors (攔截器):
如果 Guards 允許請求繼續,那麼 Interceptors 會在 Pipes 和Controller方法之前執行。
主要功能為:
-
在方法執行前/後綁定額外的邏輯:
攔截器可以在Controller方法被調用之前或之後執行自定義代碼。這允許你執行如日誌記錄等每個請求都需要執行的任務。 -
轉換函數返回的結果:
你可以使用攔截器來修改從控制器方法返回的數據。例如,你可能希望轉換數據的格式,或添加額外的元數據到響應中。 -
轉換函數拋出的異常:
如果控制器方法拋出了異常,攔截器可以捕獲這個異常,並根據需要轉換它。這可以用於統一異常處理,例如將內部錯誤轉換為更友好的用戶錯誤信息。 -
擴展基本函數行為:
攔截器允許你在不修改原始控制器方法的情況下添加新的功能。這意味著你可以在不破壞現有代碼的基礎上,增強應用程式的功能。 -
根據特定條件完全覆蓋一個函數:
有時,你可能想要根據某些條件(如緩存)完全替換控制器方法的預設行為。攔截器可以做到這一點,通過檢查特定條件,併在滿足這些條件時返回預定義的結果或執行不同的邏輯。
6. Pipes(管道):
主要用於對請求介面的入參進行驗證和轉換的前置操作。(每當一個請求被路由到具體的Controller方法後,會先通過管道對傳入的請求參數進行轉換和驗證 )
7. Exception filters (異常過濾器):
用來處理應用程式中拋出的異常和錯誤的。
可以實現:- 統一錯誤響應格式
- 自定義HTTP狀態碼
- 添加額外的響應信息
- 記錄錯誤日誌