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

来源:https://www.cnblogs.com/jingh/archive/2020/01/21/12222093.html
-Advertisement-
Play Games

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


前言

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

下麵我學習 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 以及依賴註入容器和模塊化封裝等名稱作單獨的解釋。


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

-Advertisement-
Play Games
更多相關文章
  • yarn-site.xml 配置介紹yarn.scheduler.minimum-allocation-mb yarn.scheduler.maximum-allocation-mb說明:單個容器可申請的最小與最大記憶體,應用在運行申請記憶體時不能超過最大值,小於最小值則分配最小值,從這個角度看,最小值 ...
  • 什麼是MySQL MySQL已經存在很久了,它在世界範圍內得到了廣泛的安裝和使用。 為什麼有那麼多的公司和開發人員使用MySQL?以下列出其原因。 成本——MySQL是開放源代碼的,一般可以免費使用(甚至可以 免費修改)。 性能——MySQL執行很快(非常快)。 可信賴——某些非常重要和聲望很高的公 ...
  • 什麼是資料庫 資料庫這個術語的用法很多,但就本書而言,資料庫是一個以某種 有組織的方式存儲的數據集合。理解資料庫的一種最簡單的辦法是將其 想象為一個文件櫃。此文件櫃是一個存放數據的物理位置,不管數據是 什麼以及如何組織的 資料庫(database) 保存有組織的數據的容器(通常是一個文 件或一組文件 ...
  • 趕快打開微信開發工具,快速進到項目視窗中。展開pages,展開index,展開logs,展開utils,展開一切可以展開的。唯有如此,方能見到整個項目的全貌。項目中,工程配置文件project.config.json,可用來配置appid、項目名稱、調試基礎庫,還有雲開發的文件夾路徑,至於其他的,幾... ...
  • 圓角矩形介紹 在 中通過 屬性可以實現元素的圓角矩形。 屬性值一共有 個,左上、右上、左下、右下。 屬性值規則如下:第一個值為左上、第二個值為右上、第三個值為左下、第四個值為右下。 假如 屬性值都是一致的我可以設置一個屬性值即可。 圓角矩形實踐 圓角矩形基本使用方式 如果我們的 屬性值一致實踐。 如 ...
  • 起步 下載模板: 初始化項目: 將 文件內容替換如下: 安裝模板依賴的樣式文件: 在 文件中導入樣式文件: 看到如下頁面說明成功。 ...
  • todolist小案例 "該案例的模板文件下載地址" 走外國伺服器, ̄□ ̄|| app.module.ts 核心組件app.component.ts 發現這倆不是同一類文件,哈哈哈,٩(๑ ◡ !t.done) } else if (this.visibility === 'completed') ...
  • Node.js簡介 Node.js是一個能夠在伺服器端運行JavaScript的開源代碼、跨平臺JavaScript運行環境 Node採用Google開發的V8引擎運行js代碼,使用事件驅動、非阻塞和非同步I/O模型等技術來提高性能,可優化應用程式的傳輸量和規模 Node大部分基本模塊都用JavaSp ...
一周排行
    -Advertisement-
    Play Games
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...