😎 κ³΅λΆ€ν•˜λŠ” μ§•μ§•μ•ŒνŒŒμΉ΄λŠ” μ²˜μŒμ΄μ§€?

[Nest JS 둜 CRUD κ²Œμ‹œνŒ λ§Œλ“€κΈ°] (10) NestJS PIPE & κ²Œμ‹œλ¬Ό 생성 μ‹œ μœ νš¨μ„± μ²΄ν¬ν•˜κΈ° λ³Έλ¬Έ

πŸ‘©‍πŸ’» λ°±μ—”λ“œ(Back-End)/Nest js

[Nest JS 둜 CRUD κ²Œμ‹œνŒ λ§Œλ“€κΈ°] (10) NestJS PIPE & κ²Œμ‹œλ¬Ό 생성 μ‹œ μœ νš¨μ„± μ²΄ν¬ν•˜κΈ°

μ§•μ§•μ•ŒνŒŒμΉ΄ 2023. 6. 1. 15:35
728x90
λ°˜μ‘ν˜•

<λ³Έ λΈ”λ‘œκ·ΈλŠ” John Ahn μ˜ 유튜브λ₯Ό μ°Έκ³ ν•΄μ„œ κ³΅λΆ€ν•˜λ©° μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€ :-)>

=> λ”°λΌν•˜λ©΄μ„œ λ°°μš°λŠ” NestJS

 

🧸 NestJS PIPE

: νŒŒμ΄ν”„λŠ” @Injectable () λ°μ½”λ ˆμ΄ν„°λ‘œ 주석이 달린 클래슀

: data transformation κ³Ό data validation 을 μœ„ν•΄μ„œ μ‚¬μš©λ¨

: 컨트둀러 경둜 μ²˜λ¦¬κΈ°μ— μ˜ν•΄ μ²˜λ¦¬λ˜λŠ” μΈμˆ˜μ— λŒ€ν•΄ μž‘λ™ν•¨

: Nest λŠ” λ©”μ†Œλ“œκ°€ 호좜되기 직전에 νŒŒμ΄ν”„λ₯Ό μ‚½μž…ν•˜κ³  νŒŒμ΄ν”„λŠ” λ©”μ†Œλ“œλ‘œ ν–₯ν•˜λŠ” 인수λ₯Ό μˆ˜μ‹ ν•˜κ³  이에 λŒ€ν•΄ μž‘λ™ν•¨

 

πŸŽ€ data transformation

: μž…λ ₯ 데이터λ₯Ό μ›ν•˜λŠ” ν˜•μ‹μœΌλ‘œ λ³€ν™˜

 

πŸŽ€ data validation

: μž…λ ₯ 데이터λ₯Ό ν‰κ°€ν•˜κ³  μœ μš”ν•œ 경우 λ³€κ²½λ˜μ§€ μ•Šμ€ μƒνƒœλ‘œ 전달 (그렇지 μ•ŠμœΌλ©΄ μ—λŸ¬ 처리)

λΌμš°ν„° ν•Έλ“€λŸ¬ (Router Handler) κ°€ μ²˜λ¦¬ν•˜λŠ” μΈμˆ˜μ— λŒ€ν•΄ μž‘λ™ν•¨
νŒŒμ΄ν”„λŠ” λ©”μ†Œλ“œλ₯Ό λ°”λ‘œ 직전에 μž‘λ™ν•΄μ„œ λ©”μ†Œλ“œλ‘œ ν–₯ν•˜λŠ” μΈμˆ˜μ— λŒ€ν•΄ λ³€ν™˜ν•  것이 있으면 λ³€ν™˜
μœ νš¨μ„± 체크 μœ„ν•΄μ„œλ„ 호좜됨 

 

πŸŽ€ PIPE μ‚¬μš©ν•˜λŠ” 방법 

1) Handler-level Pipes

: @UsePipes() λ°μ½”λ ˆμ΄ν„°λ₯Ό μ΄μš©ν•΄μ„œ μ‚¬μš© 함

: λͺ¨λ“  νŒŒλΌλ―Έν„°μ— 적용됨

 

2) Parameter-level Pipes

: νŠΉμ •ν•œ νŒŒλΌλ―Έν„°μ—κ²Œλ§Œ 적용이 됨

 

3) Global-level Pipes

: ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λ“€μ–΄μ˜€λŠ” λͺ¨λ“  μš”μ²­μ— 적용이 됨

: μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 레벨의 νŒŒμ΄ν”„ 

: κ°€μž₯ 상단 μ˜μ—­μΈ main.ts 에 λ„£κΈ°

 

4) Built-in Pipes

- ValidationPipe

- ParseIntPipe

- ParseBoolPipe

- ParseArraryPipe

- ParseUUIDPipe

- DefaultValuePipe

 

🧸 κ²Œμ‹œλ¬Ό 생성 μ‹œ μœ νš¨μ„± μ²΄ν¬ν•˜κΈ° 

npm install class-validator class-transformer --save

 

πŸŽ€ src/boards/dto/create-board.dto.ts

import { IsNotEmpty } from "class-validator";

export class CreateBoardDto {
    @IsNotEmpty()
    title: string;
    
    @IsNotEmpty()
    description: string;
}

 

728x90
λ°˜μ‘ν˜•
Comments