學習 NESTJS feat Part 3 === ![](https://i.imgur.com/1fldI8k.png) --- ###### tags: `Nestjs`,`TypeScript`,`TypeORM`,`Project` ## 瞭解API 與 API製作流程 ![](https://i.imgur.com/TMEqNaM.png) 看過圖以後可以瞭解,一個Repository API 不外乎以下5種模式。 如果對這些架構有興趣可以自行到以下鏈接去做查詢。 [Repository API 架構](https://typeorm.io/repository-api) 這次的計劃裏也會説明關於 Nestjs 的@save() 與 @remove() 的關係和差異行。 ![](https://i.imgur.com/ymkOyr6.png) 但在這之前,我們會先建立POST,測試class-validation 是否有成功。 --- ### 設立DTOS 到這裏先瞭解什麽是 **DTO** (Data Transfer Object)? **DTO** 定義爲 資料傳送物件,顧名思義它是一個Object,定義在如何透過網路傳送資料,達到限制性地把資料傳送出去。 **DTO** 主要可以在 WebAPI 把資料庫實體公開給用戶的情況下,去做限制如: - 移除迴圈 - 隱藏用戶端不應該檢視的特定屬性 - 省略某些屬性一降低承載大小 - 包含巢狀物件的扁平化物件圖形,使其更方便用戶端使用。 - 避免【過度張貼】弱點 - 將服務層與資料庫層分離 回到這裏,我們將在 Users 的document地下,生成一個名爲 dto 的檔案, 然後在檔案裏面建檔名爲 create-user.dto.ts : ```typescript= import {IsEmail, IsString} from 'class-validator'; export class CreateUserDto { @IsEmail() email: string; @IsString() password:string; } ``` 在這裏我們發現了class-validator的出現。 Class-validator 說白一點,就是一個接口,必定有必填字段和字段的要求,如果前臺調用這個接口時字段不符合,就會正確提示不符合要求。也可以理解爲 Class-validator 用於數據驗證。 因爲 class-validator 不是内建的,所以我們要到terminal / powerShell 去安裝。 - `npm install class-validator class-transformer` --- ### 編輯 Controller 依照設計藍圖,這個 signup 的部分是歸類在 auth 裏。 所以我們controller的gate 就會設 auth。 ```typescript= import { Body, Controller, Post } from '@nestjs/common'; import { CreateUserDto } from './dtos/create-user.dto'; @Controller('auth') // domain/auth export class UsersController { @Post('/signup') //the material in auth with POST method and name signup createUser(@Body() body: CreateUserDto){ // typescript from import dto console.log(body); } } ``` ### 測試結果 ![](https://i.imgur.com/iaGhkcO.png) 可以到Postman 或者 自己寫個request.http 去做測試: ![](https://i.imgur.com/Kap5N8L.png) ![](https://i.imgur.com/8E0yfYA.png) 這樣的話就表示成功了。 **那我們就可以進行下一個章節。**