목차
파이프(Pipe)
- 요청이 라우터 핸들러로 전달되기 전에 요청 객체를 변환할 수 있는 기회를 제공
- 미들웨어의 역할과 비슷하지만 미들웨어는 애플리케이션의 모든 콘텍스트에서 사용하도록 할 수 없음 => 미들웨어는 현재 요청이 어떤 핸들러에서 수행되는지, 어떤 매개변수를 가지고 있는지에 대한 실행 콘텍스트를 알지 못함
파이프의 목적
- 변환(trasform): 입력 데이터를 원하는 형식으로 변환, => users/user/1 의 경로 매개변수 1을 문자열에서 정수로 변환
- 유효성 검사(validation): 입력 데이터가 사용자가 정한 기준에 유효하지 않은 경우 예외 처리를 반환함
파이프의 종류
ValidationPipe
- 용도: 들어오는 데이터의 유효성 검사를 수행함
@Post()
//ValidationPipe를 통해 전달된 입력값 유효성검사
create(@Body(ValidationPipe) createUserDto: CreateUserDto) {
console.log(createUserDto);
return this.usersService.create(createUserDto);
}
//{ name: 'kim', email: 'ystar5008@naver.com' }
User-dto
import { IsString, MinLength, MaxLength, IsEmail } from 'class-validator';
export class CreateUserDto {
@IsString()
@MinLength(1)
@MaxLength(20)
readonly name: string;
@IsEmail()
@MinLength(2)
@MaxLength(30)
readonly email: string;
}
요청

parseIntPipe
- 용도: 문자열을 정수로 변환
- ex) 매개변수로 전달된 id:1를 정수로 변환
@Get(':id')
findOne(@Param('id', new ParseIntPipe()) id: number) {
// id는 정수로 변환된 값입니다.
// ...
}
ParseBoolPipe
- 용도 : 문자열을 boolean으로 변환
@Get(':isActive')
findActive(@Param('isActive', new ParseBoolPipe()) isActive: boolean) {
// isActive는 불리언으로 변환된 값입니다.
// ...
}
ParseArrayPipe
- 용도: 문자열을 배열로 변환
@Get()
findMany(@Query('ids', new ParseArrayPipe({ items: Number, separator: ',' })) ids: number[]) {
console.log(ids);
}
//[1]
요청

ParseUUIDPipe
- 용도 : 문자열을 UUID로 변환
@Get(':uuid')
find(@Param('uuid', new ParseUUIDPipe()) uuid: string) {
// uuid는 UUID 문자열로 변환된 값입니다.
// ...
}
DefaultValuePipe
- 용도 : 파라미터가 제공되지 않았을떄 기본값을 설정
@Get()
findAll(@Query('page', new DefaultValuePipe(1), ParseIntPipe) page: number) {
// page가 제공되지 않으면 기본값으로 1이 할당됩니다.
// ...
}
'개발일지' 카테고리의 다른 글
Nest.js 예외처리 Exception filter (0) | 2023.08.16 |
---|---|
Nest.JS MySQL 연결 (0) | 2023.08.16 |
Nest.js 모듈 (0) | 2023.08.14 |
Nest.js DB연동 (0) | 2023.08.13 |
Nest MySQL 연동 (0) | 2023.07.27 |
파이프(Pipe)
- 요청이 라우터 핸들러로 전달되기 전에 요청 객체를 변환할 수 있는 기회를 제공
- 미들웨어의 역할과 비슷하지만 미들웨어는 애플리케이션의 모든 콘텍스트에서 사용하도록 할 수 없음 => 미들웨어는 현재 요청이 어떤 핸들러에서 수행되는지, 어떤 매개변수를 가지고 있는지에 대한 실행 콘텍스트를 알지 못함
파이프의 목적
- 변환(trasform): 입력 데이터를 원하는 형식으로 변환, => users/user/1 의 경로 매개변수 1을 문자열에서 정수로 변환
- 유효성 검사(validation): 입력 데이터가 사용자가 정한 기준에 유효하지 않은 경우 예외 처리를 반환함
파이프의 종류
ValidationPipe
- 용도: 들어오는 데이터의 유효성 검사를 수행함
@Post()
//ValidationPipe를 통해 전달된 입력값 유효성검사
create(@Body(ValidationPipe) createUserDto: CreateUserDto) {
console.log(createUserDto);
return this.usersService.create(createUserDto);
}
//{ name: 'kim', email: 'ystar5008@naver.com' }
User-dto
import { IsString, MinLength, MaxLength, IsEmail } from 'class-validator';
export class CreateUserDto {
@IsString()
@MinLength(1)
@MaxLength(20)
readonly name: string;
@IsEmail()
@MinLength(2)
@MaxLength(30)
readonly email: string;
}
요청

parseIntPipe
- 용도: 문자열을 정수로 변환
- ex) 매개변수로 전달된 id:1를 정수로 변환
@Get(':id')
findOne(@Param('id', new ParseIntPipe()) id: number) {
// id는 정수로 변환된 값입니다.
// ...
}
ParseBoolPipe
- 용도 : 문자열을 boolean으로 변환
@Get(':isActive')
findActive(@Param('isActive', new ParseBoolPipe()) isActive: boolean) {
// isActive는 불리언으로 변환된 값입니다.
// ...
}
ParseArrayPipe
- 용도: 문자열을 배열로 변환
@Get()
findMany(@Query('ids', new ParseArrayPipe({ items: Number, separator: ',' })) ids: number[]) {
console.log(ids);
}
//[1]
요청

ParseUUIDPipe
- 용도 : 문자열을 UUID로 변환
@Get(':uuid')
find(@Param('uuid', new ParseUUIDPipe()) uuid: string) {
// uuid는 UUID 문자열로 변환된 값입니다.
// ...
}
DefaultValuePipe
- 용도 : 파라미터가 제공되지 않았을떄 기본값을 설정
@Get()
findAll(@Query('page', new DefaultValuePipe(1), ParseIntPipe) page: number) {
// page가 제공되지 않으면 기본값으로 1이 할당됩니다.
// ...
}
'개발일지' 카테고리의 다른 글
Nest.js 예외처리 Exception filter (0) | 2023.08.16 |
---|---|
Nest.JS MySQL 연결 (0) | 2023.08.16 |
Nest.js 모듈 (0) | 2023.08.14 |
Nest.js DB연동 (0) | 2023.08.13 |
Nest MySQL 연동 (0) | 2023.07.27 |