TIL

23/12/24 TIL __ nest 커스텀 데코레이터

GABOJOK 2023. 12. 25. 02:03

 

 

 

 

 

 

 

커스텀 데코레이터

 

 

이렇게 하면 req.user 말고 바로 user라는 파라미터에 정보가 담겨 오는데, 일단 천천히 살펴보자.

 

 

 

  • 우리가 원하는 대로 데코레이터의 동작을 정의하는걸 "커스텀 데코레이터" 라고 한다. 
  • 역할에 맞게 커스텀 데코레이터 를 사용해서 확장성과 편의성을 극대화 한다. 
  • 유저를 식별하는 데코레이터를 만듬으로 사용자 정보를 추출하고, 이걸 라우트 핸들러에 전달하는 작업을 수행할 수 있다.
  • 사용자 역할을 기반으로 특정 엔드포인트에 대한 접근을 제어할 수 있다.
  • data _ 데코레이터의 인자로 전달될 수 있는 데이터
  • ctx _ 현재 요청의 ExecutionContext . 즉 네스트.js의 실행 컨텍스트를 말하며 현재 요청과 관련된 모든 정보를 포함한다.

 

커스텀데코레이터 만들기

export const GetUser = createParamDecorator(
   (data, ctx: ExecutionContext): User => {
    	//User 엔티티로 타입을 정의
    	const req = ctx.switchToHttp().getRequest();
        if (req.user) { 
            return req.user; 
        } 	
        return null;
    },
);

 

 

 

만든 커스텀 데코레이터 적용하기

@Post('/test')
@UseGuards(AuthGuard())
test(@GetUser() user: User) {
	console.log('user', user);
}