-
[Nest.js] 6 - DTO & PIPESNest.js 2021. 9. 9. 13:03
Contents
1. DTO? Mapped-Type?
2. Pipes?
3. Binding Pipes
4. Built-in 8 Pipes
5. Custom Pipe
1. DTO?
- Data Transfer Object
- Mostly, to use in Controllers to validate request objects(e.g., data inputs from client)
- When Client requests and receives data with Server, we need regulations for data type, name, and so on.
-> Nest supports that those data automatically convert to class, which is called by DTOExample
- Create "dto" folder
- Create "create-board.dto.ts" to use in POST request from client
// boards/dto/create-board.dto.ts export class CreateBoardDto { title: string; description: string; }
- Use in Controller
// boards/boards.controller.ts @Post() createBoard(@Body() createBoardDto: CreateBoardDto): Promise<Board> { return this.boardsService.createBoard(createBoardDto); }
Mapped-Type?
- install mapped-type module
$ npm i @nestjs/mapped-types
- Nest supports to create DTOs easily by using gql schema and entity.
- Mapped Type : Partial, Pick, Omit, Intersection
1. Partial
- In many cases for input validation types, "Create" and "Update" arguments are almost the same.
-> Create : required
-> Update : optional- using create dto
- making update dto, which consist of optional properties, title and description
.
- will update other types later ...
2. Pipes?
- A Pipe is a class with @Injectable() decorator, and Implements the "PipeTransform" interface
https://docs.nestjs.com/pipes - Pipes work for Route Handlers' parameters
Data Transformation
- transfer input data to what we need to be(e.g., string to number)
- if we need a number type parameter from client, Pipe converts its type to number.
Data Validation
- validate input data whether it is correct type in Dto, or arguments.
- if we need a name property in length 10, and client sent more than length 10 value, it causes an error.
3. Binding Pipes
1. Global-level Pipes( = application-level Pipe)
- apply all requests from client
- app.useGlobalPipes(PipeClass)
All Request 2. Handler-level Pipes
- apply where a request corresponding to Handler
- @UsePipe(pipeClass) decorator in Handler-level
createBoard 3. Parameter-level Pipes
- appply on a specific parameter in Handler
title parameter
4. Built-in Pipes
1. ValidationPipe
- @IsNotEmpty() decorator in dto class
boards/dto/create-board.dto.ts - @UsePipes(ValidationPipe) decorator in Handler-Level
boards/boards.controller.ts - POST request without any input data
- 400 error response, and show up what needed to
400 error response 2. ParseIntPipe
- @Param('id', ParseIntPipe) in Parameter-Level Pipe
- GET request with unable parsing data, alphabets
Request data in string type - 400 error response, and show up which validation failed
400 error response 3. ParseFloatPipe
4. ParseBoolPipe
5. ParseArrayPipe
6. ParseUUIDPipe
7. ParseEnumPipe
8. DefaultValuePipe
5. custom Pipes
- implements "PipeTransform" interface
- transform() method
- it has two parameter, and return statement, which sends to Route Handler- if it occurs an error, it goes to Client with error response directly.
Example
- create a Custom Pipe
boards/pipes/board-status-validation.pipe.ts - set the pipe in Handler, parameter-level
boards/boards.controller.ts 'Nest.js' 카테고리의 다른 글
[Nest.js] 8 - CRUD summary code(#1 ~ #7) (0) 2021.09.10 [Nest.js] 7- Entity & Repository (0) 2021.09.09 [Nest.js] 5 - TypeORM / MySql(MariaDB) (0) 2021.09.08 [Nest.js] 4 - Provider (0) 2021.09.08 [Nest.js] 3 - Controller (0) 2021.09.08