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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...