---
# System prepended metadata

title: 學習 NESTJS feat Part 3
tags: [TypeScript, TypeORM, Nestjs, Project]

---

學習 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)

這樣的話就表示成功了。
**那我們就可以進行下一個章節。**


