Nestjs入門學習教程

the7主題發表於2021-02-09

初次接觸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';
}

  

在這裡插入圖片描述

相關文章