---
# System prepended metadata

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

---

學習 NESTJS feat Part 8
===
![](https://i.imgur.com/1fldI8k.png)


---
###### tags: `Nestjs`,`TypeScript`,`TypeORM`,`Project`

<br>

## 一起來做Delete 和 Update的功能

Delete 和 Update 的功能是需要索取和具有互動式的功能。
所以在這裏我們會需要用**Async Await**。

![](https://i.imgur.com/17C7ucT.png)

關於Update呢，出現了一個叫 attrs: Partial<User>
先説爲什麽要用Partial。
在Update這個Service裏面呢，我們會update 單個email， 單個password 
或者{ email,password }這樣。
這時候要怎麽具有 || 的功能呢？在nest 就要使用 Partial !

![](https://i.imgur.com/BuoaOJa.png)

---
    
簡單地說就是可以選擇性使用dto裏面的東西。
當這個步驟完成以後，我們就來到 user > dtos > 創建新的檔案叫 update-user.dto.ts
![](https://i.imgur.com/lZA7IFW.png)
這裏除了要把class-validator 去濾掉email 和 password 以外，還增加了
**@IsOptional()**
主要是表示這裏我們可以透過 Partrial 去選擇任何一個值。
    
---
    
### 完成Service設定 進入Controller
    
![](https://i.imgur.com/77pmcrQ.png)
**這裏取到的動作例如 remove , update ,create ,find 都是源自Repository 的哦
    
那remove其實也沒什麽好説的啦，就是取得url的params設定的id。
取到了方向進行Table上的刪除動作。

---

這裏要小小的説明下，在SQL的世界裏，ID是primaryKey，那是獨一無二的存在，
即使今天刪除的id不再存在，可是系統依然認爲那個key用過了，不會再次使用哦。

---
    
那回到update的部分，看圖的解説，一樣是取得url上的id。如果參照剛剛設立好的Dto
作爲Body的type去做傳送。然後傳送的對象為ID 和 身體的内容。
    
所以今天的Body只修改了Email，那就會把舊的Email覆蓋掉，
還記得DTO的設定嗎？沒錯，就是用了Optional，意味著我不一定兩個都要傳。我只要傳其中一個也可以。
    
![](https://i.imgur.com/LKU2xUb.png)

這裏使用了PATCH。（不是GET / DELETE / POST）
![](https://i.imgur.com/zJkVrie.png)

原來PATCH（記得在做Query的時候必須大寫哦）是做更動資料的send request。
通常會先做GET調動到資料再做PATCH更動。

![](https://i.imgur.com/lZIykLz.png)

最後也成功完成了更新。