728x90
controller에서 @해서 쓰는 데코레이터 커스텀으로 만들기
++ 내용 검증하고 반환해줄 수 있으니, req에 넣은 데이터 가져올 때 사용하면 좋을듯
https://springdream0406.tistory.com/193
Custom Decorator
fastcampus 강의// user-id.decorator.tsexport const UserId = createParamDecorator( (data: unknown, context: ExecutionContext) => { const request = context.switchToHttp().getRequest(); if (!request || !request.user || !request.user.sub) throw new Unauthori
springdream0406.tistory.com
- user.decorator.ts
export const User = createParamDecorator((data, context: ExecutionContext) => {
const req = context.switchToHttp().getRequest();
const user = req.user;
if (!user) {
throw new InternalServerErrorException(
'User 데코레이터는 AccessTokenGuard와 함께 사용해야 합니다. Requset에 user 프로퍼티가 존재하지 않습니다!',
);
}
return user;
});
@Post()
@UseGuards(AccessTokenGuard)
postPosts(
@User() user: UsersModel,
@Body('title') title: string,
@Body('content') content: string,
) {
const authorId = user.id;
return this.postsService.createPost(authorId, title, content);
}
만약 data도 사용하고 싶다면
export const User = createParamDecorator(
(data: keyof UsersModel | undefined, context: ExecutionContext) => {
const req = context.switchToHttp().getRequest();
const user = req.user as UsersModel;
if (!user) {
throw new InternalServerErrorException(
'User 데코레이터는 AccessTokenGuard와 함께 사용해야 합니다. Requset에 user 프로퍼티가 존재하지 않습니다!',
);
}
if (data) {
return user[data];
}
return user;
},
);
@Post()
@UseGuards(AccessTokenGuard)
postPosts(
@User('id') userId: number,
@Body('title') title: string,
@Body('content') content: string,
) {
return this.postsService.createPost(userId, title, content);
}
학습 페이지
www.inflearn.com
728x90
'코딩 > Nest.js' 카테고리의 다른 글
Class Transformer (0) | 2024.10.21 |
---|---|
Class Validator & DTO(Data Transfer Object) (0) | 2024.10.20 |
Guard 기본적 느낌 (0) | 2024.10.20 |
Header에 id:password (0) | 2024.10.18 |
소셜 로그인 (0) | 2024.06.15 |