- data는 컨트롤러에서 넣어준 인자를 뜻한다.
- 이걸로 원하는 속성만 return 해줄수있다.
import { createParamDecorator, ExecutionContext, InternalServerErrorException } from "@nestjs/common";
import { UsersModel } from "../entities/users.entity";
/**
* accessTokenGuard에서 req에 넣어준 user를 검사하고
* 리턴해주는 데코레이터
* @param : usersModel의 key
*/
export const User = createParamDecorator((data: keyof UsersModel | undefined, context : ExecutionContext) => {
const req = context.switchToHttp().getRequest();
const user = req.user;
/**
* AccessTokenGuard 사용후 (req.user에 주입후)
* 이걸 사용해야 user가 있음.
* 이게 비어있다 ? -> 서버에러임 -> AccessTokenGuard를 추가하면됨
*/
if (!user) {
throw new InternalServerErrorException('' +
'User 데코레이저는 AccessGuard와 함께 사용해야합나다. ' +
'Request에 user 프로퍼티가 존재하지 않습니다!')
}
/**
* @User('id')와 같이 특정 속성만 달라고 요청한경우
*/
if(data){
return user[data];
}
return user;
});
- 컨트롤러
@Post()
@UseGuards(AccessTokenGuard)
createPost(
@User('id') userId : number,
@Body('title') title: string,
@Body('content') content:string, ){
return this.postsService.createPost(userId , title, content);
}
'JS > Nest.js' 카테고리의 다른 글
[Nest] DTO 구현, class-validator, message 구현 (0) | 2024.09.20 |
---|---|
[Postman] 자동으로 accessToken 주입 설정, authorization 설정 (0) | 2024.09.20 |
[Nest] DI 실습 export service, import module, Nest can't resolve dependencies of the 해결, 게시글 생성제한 구현 (0) | 2024.09.20 |
[Nest] Guard => req에 user 넣기, 로그인 과정 복습, 토큰 타입확인 (0) | 2024.09.20 |
[Nest] 커스텀 파이프 => 비밀번호 길이 제한 구현 (0) | 2024.09.20 |