2021 年,JavaScript 是使用最廣泛的編程語言。
這項技術的吸引力是不可否認的,從大量支持 JavaScript 編程的框架就可以看出這一點。
前端有 Angular、React 和 Vue,後端有 Express 和 Next,僅舉幾例。
有這麼多精彩的 JavaScript 後端編程框架可供使用,您可能會想為什麼我會搜索不同的東西,而不是簡單地使用 Express 或 Next。
也許您需要使用像樣的樣板快速啟動開發過程,並且手動添加不僅新控制器而且服務會讓您感到不適。
或者您想要創建易於管理的大型、可擴展的軟件。 或者您可能只是希望以更高效、更方便的方式工作。
無論您的情況是哪一種,Nest.js 都可以成為滿足您需求的完美解決方案。
這篇文章將提供 NestJS 見解以及實踐經驗。
什麼是 NestJS?
巢穴 是一個開源、可擴展、適應性強的漸進式 Node 框架 .js 用於構建、參與和挑戰後端系統的框架。 現在是增長速度最快的節點。
js 的 TypeScript 框架。 NestJS 用於創建可擴展、可測試且鬆散連接的應用程序。
它增加了 Node.js 的可擴展性。 Js 服務器已經被提升到了一個全新的水平。 支持的數據庫包括 PostgreSQL、MongoDB 和 MySQL。
NestJS 是可擴展的,因為它可以與其他庫一起使用; 靈活,因為其適應性強、成熟的生態系統。 由於它支持 JavaScript 功能和設計原則,所以它是進步的。
它主要受到 Angular、React 和 Vue 的影響,並帶有內置的依賴注入。
功能
- 它易於使用、學習和掌握。
- 它是免費的並且 開放源碼 (麻省理工學院許可證)
- 強大的命令行界面 (CLI) 可提高工作效率並簡化開發
- 易於使用的單元測試程序
- 使用 TypeScript,這是一種緊密類型語言,是 JavaScript 的超集。
- 開發和維護活躍的代碼庫。
- 支持數百個特定於嵌套的模塊,可以輕鬆地與 TypeORM、Mongoose、GraphQL、日誌記錄、驗證、緩存、WebSockets 等流行技術和想法進行交互。
NestJS 的構建塊是什麼?
下面列出了 Nest 應用程序的構建組件; 還有其他的,但這三個是最重要的。 讓我們快速瀏覽一下它們。
1。 控制器
控制器負責處理傳入的請求並響應客戶端。 它接收特定的 HTTP 請求,路由系統確定哪個控制器接收哪個請求。
然後它會起草一個合適的答案並發送出去。 在類和裝飾器的幫助下,構建了一個簡單的收集器,每個控制器都有自己的一組路由來執行各種任務。
2.提供者
提供者是 Nest 的一個關鍵理念。 許多核心 Nest 類(服務、存儲庫、工廠、助手等)都可以作為提供者進行處理。
提供者的基本概念是它可以作為依賴項注入; 這意味著對象可以相互形成各種關聯,並且“連接”對象實例的角色可以主要外包給 Nest 運行時系統。
3。 模塊
模塊是帶有 @Module() 裝飾器的類,用於組織應用程序結構的組件。 每個應用程序都有一個根模塊,用於構建應用程序圖,這進一步解決了提供者和模塊之間的依賴關係和交互。
該裝飾器向 Nest.js 提供元數據,以便識別應用程序代碼中將使用哪些組件、控制器或其他資源,並將它們組合成一個集合。
每個模塊都有一組以某種方式連接的功能。
NestJS 入門
1。 安裝
讓我們按照以下步驟安裝 NestJS 並使用它創建一個項目:
結果將創建以下目錄結構:
2。 控制器
Nest 的構建塊是控制器。 這些是將處理入站請求的位置。 您可以使用 HTTP 方法修飾符(Get、Post、Put、Delete 等)裝飾器指定路由路徑,如下面的代碼所示。
Nestjs 採用裝飾器方法,主要是用 Typescript 開發的,儘管它也支持 JavaScript。 您還可以使用類驗證器來驗證請求正文。
我將創建一個 Nestjs 服務器實例並全局添加 ValidationPipe。 管道只是在控制器之前執行的方法。 還可以使用 @UsePipes 裝飾器在方法/參數級別應用管道。
3.提供者
Providers 是 Nestjs 的另一個重要組成部分。 到目前為止,我將數據存儲在臨時變量中。 這就是為什麼可以使用控制器處理程序來完成如此簡單的任務。
然而,對於更大、更複雜的邏輯,代碼分離和重用會很困難。 這就是供應商進來的時候。您可以使用 @Injectable 裝飾器在類之上聲明/創建供應商。 然後,使用提供程序,您可以執行依賴項注入、日誌記錄和其他任務。
4。 模塊
Nestjs 模塊不是全局的; 相反,它們有深度。
但是,它也可以與任何其他模塊共享。 儘管它像 Angular 一樣提供全局模塊,但更建議將服務/控制器保留在 Nestjs 中最常用的模塊中。
NestCLI 大多數時候用於生成模塊,並且在該模塊的上下文中生成的提供程序/控制器由 CLI 自動添加。 這些被稱為功能模塊。
5. 異常過濾器
異常過濾器是當控制器拋出異常時調用的錯誤處理程序。 它會自動管理問題並提供適當的、用戶友好的錯誤消息。
@nestjs/common 包提供了許多 HttpException 繼承的異常,包括 NotFoundException、BadRequestException、NotAcceptableException、UnauthorizedException 等等。 您甚至可以設計自己的異常過濾器。
6.中間件
在路由處理程序之前調用的函數稱為中間件。 請求和響應對象,以及應用程序的請求-響應週期中的 next() 中間件函數,都可由中間件函數訪問。
稱為 next 的變量通常用於標識下一個中間件函數。 自定義 Nest 中間件可以使用 @Injectable() 裝飾器在方法或類中實現。
7. 守衛
守衛只負責一件事。 他們有責任根據具體情況(具體來說,用戶定義的邏輯)評估控制器是否會處理請求。
它對於身份驗證/授權很有幫助,是 Nestjs 中推薦的方法。
雖然身份驗證/權限等可以使用中間件完成,但在 Express 或其他 HTTP 服務器中卻無法完成,因為它們沒有相關的強上下文,並且沒有理由知道將使用哪種方法來處理請求。
優點
- 該框架嚴重依賴註釋,註釋用於生成從端點到 Swagger 文檔的任何內容。 端點基本而整潔,並且註釋總體上使開髮變得更容易。
- 由於 Nest.js 是一個基於模塊的框架,因此可以輕鬆外部化通用模塊並在許多項目中重用代碼。
- Nest.js 的文件夾結構受 Angular 影響顯著。 在設計 Nest 服務時,可以最大限度地減少停機時間。
- 組件有自己的目錄,根目錄包含應用程序模塊和主文件。 由於結構簡單,因此可以將更多注意力放在端點及其客戶的設計上,而不是應用程序的結構上。
- Nest 與 Angular 一樣,提供了一個很好的命令行工具 Nestjs/cli,可以通過 Node Package Manager 來使用。
弊端
- Nest 在 TypeScript 使用和 Angular 集成方面具有優勢,但缺乏大公司的資金支持。
- 缺乏文檔對 Nest 用戶構成了最大的威脅。 儘管該框架與其他框架具有出色的交互性,但文檔很少,並且沒有解決任何潛在的困難。
- Nest 在 TypeScript 使用和 Angular 方面具有優勢。
結論
NestJS 為開發人員提供了巨大的優勢。 要開始開發,您需要做的就是 創建一個新的應用程序 現在就可以走了。 該框架立即提供了顯著的提升,同時還通過建立合適的應用程序架構來幫助您採取額外的步驟。
它利用尖端的方法和技術來生成易於管理且持久的應用程序。 它可用於連接 GraphQL、WebSockets 並構建微服務。
發表評論