@Injectable()
데코레이터로 주석이 달린 클래스를 말한다.
Data Transformation과 Data Validation을 위해 사용.
컨트롤러 경로 처리기에 의해 처리되는 인수에 대하여 작동
메서드가 호출되기 직전, 파이프를 삽입하고, 파이프는 메서드로 향하는 인수를 수신하고 작동한다.
입력 데이터를 원하는 형식으로 변환하는 것
만약 숫자형을 원하는데 문자열로 온다면 파이프에서 자동으로 숫자형으로 바꾸어 준다.
string "7" => Integer 7
데이터 유효성 체크이다.
입력 데이터를 평가하고, 유효한 경우, 그대로 전달한다. 만약 유효하지 않다면 예외를 발생시킨다.
비밀번호에 대문자와 특수기호가 없다면 에러를 발생시킨다.
핸들러 레벨에서 @UsePipes()
데코레이터를 이용해서 사용한다.
모든 파라미터에 적용됨.
@Post()
@UsePipes(pipe)
createBoard(
// 파라미터인 title과 description 모두에 대하여 적용된다.
@Body('title') title,
@body('description') description
){}
파라미터 레벨의 파이프이다
특정한 파라미터에게만 적용된다.
@Post()
createBoard(
// ParameterPipe가 사용된 title 파라미터에 대하여만 적용된다.
@Body('title', ParameterPipe) title,
@body('description') description
){}
어플리케이션 레벨의 파이프.
클라이언트에서 들어오는 모든 요청에 적용된다. 최상위 단계인 main.ts
에서 사용
async function bootstrap(){
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(GlobalPipes);
await app.listen(3000);
}
bootstrap();
# class-validator
npm install class-validator --save
# class-transformer
npm install class-transformer --save
src/boards/dto/create-board.dto.ts
import { IsNotEmpty } from 'class-validator';
export class CreateBoardDto {
// 유효성 체크 추가
@IsNotEmpty()
title: string;
@IsNotEmpty()
description: string;
}
src/boards/boards.controller.ts
@Post()
// 유효성 검사를 위한 핸들러 레벨 파이프
@UsePipes(ValidationPipe)
createBoard(@Body() createBoardDto: CreateBoardDto): Board {
return this.boardsService.createBoard(createBoardDto);
}