코딩/Nest.js
커스텀 데코레이터
춘 몽
2024. 10. 20. 18:43
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