NestJS 基礎概念

来源:https://www.cnblogs.com/xinfangzhang/p/18121157
-Advertisement-
Play Games

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方法之前執行。

主要功能為:

    1. 在方法執行前/後綁定額外的邏輯:
      攔截器可以在Controller方法被調用之前或之後執行自定義代碼。這允許你執行如日誌記錄等每個請求都需要執行的任務。

    2. 轉換函數返回的結果:
      你可以使用攔截器來修改從控制器方法返回的數據。例如,你可能希望轉換數據的格式,或添加額外的元數據到響應中。

    3. 轉換函數拋出的異常:
      如果控制器方法拋出了異常,攔截器可以捕獲這個異常,並根據需要轉換它。這可以用於統一異常處理,例如將內部錯誤轉換為更友好的用戶錯誤信息。

    4. 擴展基本函數行為:
      攔截器允許你在不修改原始控制器方法的情況下添加新的功能。這意味著你可以在不破壞現有代碼的基礎上,增強應用程式的功能。

    5. 根據特定條件完全覆蓋一個函數:
      有時,你可能想要根據某些條件(如緩存)完全替換控制器方法的預設行為。攔截器可以做到這一點,通過檢查特定條件,併在滿足這些條件時返回預定義的結果或執行不同的邏輯。

 

6. Pipes(管道):

主要用於對請求介面的入參進行驗證和轉換的前置操作。(每當一個請求被路由到具體的Controller方法後,會先通過管道對傳入的請求參數進行轉換和驗證 )

 

7. Exception filters (異常過濾器):

用來處理應用程式中拋出的異常和錯誤的。

 可以實現:
  1. 統一錯誤響應格式
  2. 自定義HTTP狀態碼
  3. 添加額外的響應信息
  4. 記錄錯誤日誌

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概述 在主從複製中,一般有一個主資料庫(Master)和一個或多個從資料庫(Slave),主資料庫負責接收和處理寫操作,從資料庫複製主資料庫的日誌文件,將寫操作在自身的資料庫重演,從而實現數據的同步 複製類型 STATEMENT:把主資料庫執行的 sql 複製到從資料庫,是預設類型 ROW:直接把數 ...
  • 一、CustomDialog CustomDialog組件是一種自定義對話框,可以通過開發人員根據特定的要求定製內容和佈局。它允許開發人員創建一個完全可定製的對話框,可以顯示任何類型的內容,例如文本、圖像、表單和按鈕。 CustomDialog通常用於在執行任務之前向用戶提供額外的信息或輸入選項 ...
  • 一、TextInput/TextArea TextInput和TextArea組件通常用於收集用戶輸入的文本數據。 TextInput組件通常用於單行文本的輸入,它允許用戶通過一個游標來輸入文字,並支持多種樣式和佈局選項來提高用戶體驗。例如,在用戶輸入錯誤時可以顯示錯誤消息或在用戶輸入時自動完成 ...
  • Android 音視頻開發 - VideoView 本篇文章主要介紹下Android 中的VideoView. 1: VideoView簡介 VideoView是一個用於播放視頻的視圖組件,可以方便地在應用程式中播放本地或網路上的視頻文件。 VideoView可以直接在佈局文件中使用,也可以在代碼中 ...
  • Android音視頻開發 - MediaMetadataRetriever 相關 MediaMetadataRetriever 是android中用於從媒體文件中提取元數據新的類. 可以獲取音頻,視頻和圖像文件的各種信息,如時長,標題,封面等. 1:初始化對象 private MediaMetada ...
  • 關鍵詞:Android Framework 動態庫 動態鏈接 Binder 1、事件起因 Android Studio一次更新後發現install App,設備就重啟了,跑了一遍開機動畫但不是從開機第一屏開始重啟,tombstones內容查看發現是surfaceflinger掛在libbinder. ...
  • XPath(XML Path Language)是XSLT標準的主要組成部分。它用於在XML文檔中瀏覽元素和屬性,提供了一種強大的定位和選擇節點的方式。 XPath的基本特點 代表XML路徑語言: XPath是一種用於在XML文檔中導航和選擇節點的語言。 路徑樣式語法: XPath使用路徑表達式的“ ...
  • 一、是什麼 WebSocket,是一種網路傳輸協議,位於OSI模型的應用層。可在單個TCP連接上進行全雙工通信,能更好的節省伺服器資源和帶寬並達到實時通迅 客戶端和伺服器只需要完成一次握手,兩者之間就可以創建持久性的連接,併進行雙向數據傳輸 從上圖可見,websocket伺服器與客戶端通過握手連接, ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...