custom-decorators
https://docs.nestjs.com/custom-decorators
#
Custom route decoratorsNest 는 데코레이터 중심으로 구축되었다.
- 함수를 반환하고, target, name, property 를 인수로 가질 수 있는 표현식
- @ character 를 class, method, property Top 에 데코레이팅 할 수 있다.
#
Param decoratorsNest 가 제공하는 Param decorators 는,
- HTTP route handler 와 함께 쓰인다.
@Request() , @Req() | req |
@Response() , @Res()* | res |
@Next() | next |
@Session() | req.session |
@Param(key?: string) | req.params / req.params[key] |
@Body(key?: string) | req.body / req.body[key] |
@Query(key?: string) | req.query / req.query[key] |
@Headers(name?: string) | req.headers / req.headers[name] |
@Ip() | req.ip |
@HostParam() | req.hosts |
custom decorators 가 유용한 이유
- note.js 에서는, 프로퍼티들을 Request 객체에 붙이는 것이 관습니다.
- 프로퍼티들을 각각의 route handler 에게서 추출할 수 있다.
@User
데코레이터를 사용함으로써, 코드를 가독성있게 할 수 있다.
user.decorator.ts
#
Passing data사용자 Entity
데코레이터의 동작이 Condition 에 따라 달라지면, Data Parameter 를 사용하여,
decorator's 팩터리 함수에 argument 를 전달 할 수 있다.
key 로 request 객체에서 속성을 추출하는 커스텀 데코레이터
user.decorator.ts
createParamDecorator<T>()
TS 에서 createParamDecorator<T>()
는 Generic 이다.
타입안정성을 강제하기 위해서
createParamDecorator<string>((data, ctx) => ...)
보다 (any 타입)createParamDecorator((data: string, ctx) => ...)
을 사용할 수 있다.
#
Working with pipesNest 는 내장 매개변수(@Body(), @Param(), @Query) 와 동일한 방식응로 커스텀 매개변수 데코레이터를 처리한다.
- 커스텀 매개변수 데코레이터에서도, 파이프를 실행할 수 있음.
validateCustomDecorators
validateCustomDecorators
옵션은 항상 true 이어야 한다.
ValidationPipe
는 기본적으로, 커스텀 데코레이터가 달린 인자를 검사하지 않기 때문이다.
#
Decorator Compositionauth.decorator.ts :: 인증과 관련된 모든 데코레이터를 단일 데코레이터로 결합
applyDecorators
여러 데코레이터를 구성하는 헬퍼 메서드