ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NestJS 기본강의 - 2. Pipe
    NestJS/NestJS 기본강의 2022. 7. 7. 18:02

    Pipe은 무엇인가? ( 필터같음 )

    - 파이프는 @Injectable () 데코레이터로 주석이 달린 클래스이다

    - 파이프는 data transformation과 data validation을 위해서 사용

    - 파이프는 컨트롤러 경로 처리기에 의해 처리되는 인수에 대해 작동

     

    - Nest는 메소드가 호출되기 직전에 파이프를 삽입하고 파이프는 메소드로 향하는 인수를 수신하고 이에 작동

     

    Data Transformation

    - 입력 데이터를 원하는 형식으로 변환 ( 예 : 문자열에서 정수로 )

    - 만약 숫자를 받길 원하는데 문자열 형식으로 온다면 파이프에서 자동으로 숫자로 변경

     

    Data validation

    - 입력 데이터를 평가하고 유효한 경우 변경되지 않은 상태로 전달하면 된다

    - 그렇지 않으면 데이터가 올바르지 않을 때 예외를 발생

     

    파이프는 Data Transformation, Data validation 두가지 모든 경우에서..

    - 라우트 핸들러 ( Route Handler ) 가 처리하는 인수에 대해서 작동

    - 그리고 파이프는 메소드를 바로 직전에 작동해서 메소드로 향하는 인수에 대해서 변환할 것이 있으면 변환하고 유효성 체크를 위해서 호출

     

    PIPE 사용하는 법(Binding Pipes)

    - 파이프를 사용하는 방법(Binding pipes)은 세가지로 나눠진다.

    - Handler-level Pipes, Parameter-level Pipes, Global-level Pipes

     

    Handler-level Pipes

    - 핸들러 레벨에서 @UsePipes() 데코레이터를 이용해서 사용할 수 있다

    - 이 파이프는 모든 파라미터에 적용

    @Post()
    @UsePipes(pipe)
    createBoard(
        @Body('title') title,
        @Body('description') description
    ){
    }

     

    Parameter-level Pipes

    - 파라미터 레벨의 파이프이기에 특정한 파라미터에게만 적용이 되는 파이프이다

    @Post()
    createBoard(
        @Body('title', ParameterPipe) title,
        @Body('description') description
    ){
    
    }

     

    Global Pipes

    - 글로벌 파이프로서 애플리케이션 레벨의 파이프이다

    - 클라이언트에서 들어오는 모든 요청에 적용

    - 가장 상단 영역인 main.ts에 넣어주면 된다.

    async function bootstrap() {
        const app = await NestFactory.create(AppModule);
        app.useGlobalPipes(GlobalPipes);
        await app.listen(3000);
    }
    bootstrap();

     

    Built-in Pipes

    - Nest JS에 기본적으로 사용할 수 있게 만들어 놓은 6가지의 파이프가 있다

        ㆍValidationPipe

        ㆍParseIntPipe : 문자열 요청받으면 에러

        ㆍParseBoolPipe

        ㆍParseArrayPipe

        ㆍParseUUIDPipe

        ㆍDefaultValuePipe


    파이프 생성 시 필요한 모듈

    - class-validator, class-transformer

    npm install class-validator class-transformer --save

    커스텀 파이프 구현 방법

    - 먼저 PipeTransform이란 인터페이스를 새롭게 만들 커스텀 파이프에 구현해줘야한다.

    - 이 PipeTransform 인터페이스는 모든 파이프에서 구현해줘야하는 인터페이스

    - 이것과 함께 모든 파이프는 transform() 메서드를 필요

    - 이 메서드는 NestJS가 인자(arguments)를 처리하기 위해서 사용

    export class BoardStatusValidationPipe implements PipeTransform {
        transform(value:any, metadata: ArgumentMetadata) {
            console.log('value', value);
            console.log('metadata',metadata);
            return value;
        }
    }

    transform() 메서드

    - 이 메서드는 두개의 파라미터를 가진다.

    - 첫번째 파라미터는 처리가 된 인자의 값(value)이며

      두번째 파라미터는 인자에 대한 메타 데이터를 포함한 객체이다

    - transform()메서드에서 Return 된 값은 Route 핸들러로 전해진다

    - 만약 예외(Exception)가 발생하면 클라이언트로 바로 전해진다.

     

    * readonly class property

    - 접두사(prefix) readonly는 속성을 일기 전용으로 만드는 데 사용

    - 읽기 전용 멤버는 클래스 외부에서 액세스 할 수 있지만 해당 값을 변경할 수는 없다. 

    댓글

Designed by Tistory.