初次接觸Nest,有問題歡迎指出???:
簡介
NestJS
是一個用於構建高效、可擴充套件的Node.js
伺服器端應用程式的開發框架。簡單來說是一款Node.js
的後端框架。
它利用
JavaScript
的漸進增強的能力,使用並完全支援TypeScript
(仍然允許開發者使用純 JavaScript 進行開發),並結合了:
- O O P ( 面 向 對 象 編 程 ) \color{red} {OOP (物件導向程式設計)} OOP(面向對象編程)
- F P ( 函 數 式 編 程 ) \color{red} {FP (函數語言程式設計)} FP(函數式編程)
- F R P ( 函 數 響 應 式 編 程 ) \color{red} {FRP (函式響應式程式設計)} FRP(函數響應式編程)
在底層,Nest
構建在強大的 HTTP 伺服器框架上,例如 Express (預設),並且還可以通過配置從而使用 Fastify!
核心概念:提供一種體系結構,它幫助開發人員實現層的最大分離,並在應用程式中增加抽象。
特點
-
向開發者直接暴露底層框架的 API
-
完美支援ts
-
相容express中介軟體(express是最早出現的輕量級的node server端框架,Nestjs能夠利用所有express的中介軟體,使其生態完善)
-
層層處理,一定程度上可以約束程式碼(比如何時使用中介軟體、何時需要使用guards守衛等)。
-
依賴注入以及模組化的思想,提供了完整的mvc的鏈路,使得程式碼結構清晰,便於維護。
前期準備
-
安裝好Nodejs
版本>= 10.13.0,看官網這樣要求的,我安裝的node版本是10.15.3,所以沒有試低版本的是否可以使用。
-
安裝好MongoDB
- mac版本的安裝可以參考連結:https://blog.csdn.net/weixin_43363871/article/details/93979124。
- MongoDB的使用見NestJs(二),此次是基礎。
構建
-
安裝:
npm i -g @nestjs/cli
-
初始化專案:
nest new 專案名稱
此步驟會讓你選擇使用npm 還是yarn,如下圖:
-
啟動
進入資料夾後啟動:
啟動後在瀏覽器訪問
http://localhost:3000/
便可出現Hello World!,說明已搭建好專案,如下圖所示:
為什麼通過以上2個命令訪問埠就出現Hello World!呢,下面從生成的檔案目錄談起:
專案目錄
src下面是幾個核心檔案:
檔案 | 說明 |
---|---|
app.controller.spec.ts | 針對控制器的單元測試 |
app.controller.ts | 帶有單個路由的基本控制器 |
app.module.ts | 應用程式的根模組(root module) |
app.service.ts | 具有單一方法的基本服務(service) |
main.ts | 應用程式的入口檔案,它使用核心函式 NestFactory 來建立 Nest 應用程式的例項 |
核心
模組Module
, 控制器Controller
, 服務與依賴注入Provider Dependency injection
。
-
模組Module: 用於將程式碼拆分為獨立的和可重用的模組。
例如使用者資訊模組,然後將該使用者模組的控制器和服務集合進來,最後直接將使用者模組匯入到根
Module
就可以使用了。 -
控制器Controller: 負責處理客戶端傳入的請求引數並向客戶端返回響應資料。
nest.js提供許多http請求的裝飾器,如例如
@Body()
,@Post()
等。控制器不需要定義任何諸如從客戶端獲取資料、驗證使用者輸入等工作,這些都是交給服務Provider
處理,通過把任務委託給各種服務,可以讓控制器類更加精簡、高效。 -
服務Provider :在這裡處理所有請求執行邏輯,在控制器中通過
constructor
函式以依賴注入的方式實現。constructor(private readonly catsService: CatsService) {}
控制器的目的是接收應用的特定請求。路由機制控制哪個控制器接收哪些請求。通常,每個控制器有多個路由,不同的路由可以執行不同的操作。
為了建立一個基本的控制器,我們必須使用裝飾器。裝飾器將類與所需的後設資料關聯,並使Nest
能夠建立路由對映(將請求繫結到相應的控制器)。
Nestjs路由
以下例子中,使用了定義基本控制器所需的@Controller('cats')
裝飾器。將可選字首設定為cats
。使用字首可以避免在所有路由共享通用字首時出現衝突的情況。
-
用CLI建立控制器執行命令(也可以手動建立):
nest g controller cats
,src下面會多出資料夾cats
: -
cats.controller.ts
-
Get路由
在該檔案加入以下程式碼:@Get() findAll(): string { return 'This action returns all cats'; }
findAll()
方法之前的@Get()
HTTP請求方法裝飾器告訴Nest
為HTTP請求的特定端點建立處理程式。訪問路由:
http://localhost:3000/cats
-
建立了一個端點來獲取資料—— G E T 路 由 \color{purple}{GET路由} GET路由 。 那建立新記錄的端點呢?? -
Post路由
繼續在
cats.controller.ts
檔案中加入以下程式碼:@Post() create(): string { return 'This action adds a new cat'; }
-
Put路由
在
cats.controller.ts
檔案中加入以下程式碼:@Put(':id') update(@Param('id') id: string) { return `This action updates a #${id} cat`; }
-
Delete路由
在
cats.controller.ts
檔案中加入以下程式碼:@Delete(':id') remove(@Param('id') id: string) { return `This action removes a #${id} cat`; }
-
Nestjs 狀態碼
在上面路由的例子中細心的人應該已經發現除了Post
之外其他的狀態碼都是 200 \color{red}{200} 200,Post的確是 201 \color{red}{201} 201。
我們可以通過在處理程式層新增@HttpCode(...)
裝飾器來修改此行為:
@Post() @HttpCode(200) create() { return 'This action adds a new cat'; }