前言 最近在學習研究 Nest 框架,但是在學習過程中除了參考翻閱官方文檔外國內幾乎沒有多少資料能系統的講解 Nest 的相關內容,所以打算想通過我自己學習的角度講解下 Nest 框架,不知道能堅持多久,也可能有錯誤或遺漏的地方,歡迎大家批評指正。 下麵我學習 Nest 的主要信息來源,在編寫過程中 ...
前言
最近在學習研究 Nest 框架,但是在學習過程中除了參考翻閱官方文檔外國內幾乎沒有多少資料能系統的講解 Nest 的相關內容,所以打算想通過我自己學習的角度講解下 Nest 框架,不知道能堅持多久,也可能有錯誤或遺漏的地方,歡迎大家批評指正。
下麵我學習 Nest 的主要信息來源,在編寫過程中還會有其他途徑獲取的信息會在文末給出:
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 以及依賴註入容器和模塊化封裝等名稱作單獨的解釋。