1. 程式人生 > >Nest.js你學不會系列-初識Nest

Nest.js你學不會系列-初識Nest

前言

最近在學習研究 Nest 框架,但是在學習過程中除了參考翻閱官方文件外國內幾乎沒有多少資料能系統的講解 Nest 的相關內容,所以打算想通過我自己學習的角度講解下 Nest 框架,不知道能堅持多久,也可能有錯誤或遺漏的地方,歡迎大家批評指正。

下面我學習 Nest 的主要資訊來源,在編寫過程中還會有其他途徑獲取的資訊會在文末給出:

  • 官網:https://nestjs.com/

  • 中文網站:https://docs.nestjs.cn/

  • GitHub: https://github.com/nestjs/nest

什麼是 Nest

Nest 是一個用於構建高效,可擴充套件的 Node.js 伺服器端應用程式的框架。它使用漸進式 JavaScript,內建並完全支援 TypeScript(但仍然允許開發人員使用純 JavaScript 編寫程式碼)並結合了 OOP(面向物件程式設計),FP(函數語言程式設計)和 FRP(函式式響應程式設計)的元素。

Nest 框架底層 HTTP 平臺預設是基於 Express 實現的,所以無需擔心第三方庫的缺失。 Nest 旨在成為一個與平臺無關的框架。 通過平臺,可以建立可重用的邏輯部件,開發人員可以利用這些部件來跨越多種不同型別的應用程式。 從技術上講,Nest 可以在建立介面卡 後使用任何 Node HTTP 框架。 有兩個支援開箱即用的 HTTP 平臺:express 和 fastify。

Nest 提供了一個開箱即用的應用程式架構,允許開發人員和團隊建立高度可測試,可擴充套件,鬆散耦合且易於維護的應用程式。

在利用 NestJs 框架中,開發者可以體驗到 NestJs 清晰的模組組織方式,隔離應用的各個工作區間;在各種工作區間都涉及不一樣的設計模式,比如面向物件的SOLID原則在整個應用構建中的體現,AOP、DI、IoC 等在各個核心部件中的應用,OOP、FP、FRP 在各模組編碼中的完美結合,都給開發中帶來不一樣的體驗。

Nest 的特性

  • 依賴注入容器
  • 模組化封裝
  • 可測試性
  • 內建支援 TypeScript
  • 可基於 Express 或者 fastify

什麼情況下使用 Nest

如果是一個簡單的應用,其實用什麼框架都無所謂,一個框架用 100 行程式碼實現,另一個用 80 行,區別不大。但涉及到企業級的應用,分分鐘有上萬行的程式碼,程式碼的組織結構就變得很重要了。如果程式碼拆分不合理,一個 JS 檔案就有上千行的程式碼,後期的維護成本會非常的高。再考慮到複雜專案參與者眾多,沒有一個規範去約束的話,每個人寫出來的程式碼風格迥異,協作起來會很難受。上文提到的幾個框架對專案程式碼的架構要麼是沒約束,要麼就是約束比較弱或者看起來很彆扭。相比之下Nest的實現就很簡潔,用起來很順手。

安裝

在安裝前請確保您的作業系統上安裝了 Node.js(> = 8.9.0)。

  • 使用 CLI
  $ npm i -g @nestjs/cli
  $ nest new project-name
  • 使用 git
  $ git clone https://github.com/nestjs/typescript-starter.git project
  $ cd project
  $ npm install
  $ npm run start
  • 手動建立
  $ npm i --save @nestjs/core @nestjs/common rxjs reflect-metadata

執行

  $ nest start

然後我們訪問 http://localhost:3000 就可以看到 Hello World! 了。

從上面的命令列中可以看出來整個專案是用 ts-node 跑起來的,這樣的目的就是在開發環境節去了編譯 .ts 的過程(實際上是 ts-node 在背後做了這個事情)。和其他 ts-node 專案不同的是,大多數 ts-node 執行在記憶體中,但是我們通過專案目錄發現在 start 時會產生一個 dist 目錄,哪怕是在開發環境其實我們訪問的也是 dist 檔案中的內容, 我們可以通過修改 tsconfig.json 中的 outDir 來修改輸出的目錄地址。

如果想要 watch 檔案的修改建議使用 npm run start:dev 啟動專案。

好了,今天這節就講到這裡,後續我們會針對 AOP、DI、IoC、OOP、FP、FRP 以及依賴注入容器和模組化封裝等名稱作單獨的解釋