[TIL] NestJS 공부 15일차
인터셉터
더 많은 연산자
전 내용이 스트림을 재정의, 즉 override
하는 것이였는데 이렇게 바꿀 수 있는 점은 많은 기능으로 연결된다.
timeout 처리를 해야한다면 아래 코드처럼 timeout()
을 이용하여 5초 후에 요청 처리를 취소한다.
import {
Injectable,
NestInterceptor,
ExecutionContext,
CallHandler,
RequestTimeoutException,
} from '@nestjs/common';
import { Observable, throwError, TimeoutError } from 'rxjs';
import { catchError, timeout } from 'rxjs/operators';
@Injectable()
export class TimeoutInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler):
Observable<any> {
return next.handle().pipe(
timeout(5000),
catchError((err) => {
if (err instanceof TimeoutError) {
return throwError(new RequestTimeoutException());
}
return throwError(err);
})
);
}
}
Custom Decorator
NestJS는 decorator를 중심으로 만들어졌다. decorator는 프로그래밍 언어에서 어느정도 잘 쓰였지만, Javascript에서는 새로운 개념이라 볼 수 있다. 데코레이터를 이해하기 위해선 어느정도 기초 공부가 필요하니 다른 문서를 찾아보는 것을 추천해줬다.
어쨌든 여기까지 공부하면서 수 많은 데코레이터를 사용해봤고, 그래서 알 수 있는 점은
@
로 시작하여 decorate하고 싶어하는 맨 위에 적용시킨다. 라는 것이다.
Express Decorator는 @Req
, @Res
등 여러가지 있는데 사용자 지정 데코레이터는 왜 필요할까?
일단 가독성이 올라간다. request를 받을 때에도
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
export const User = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
return request.user;
}
);
아래처럼 따로 데코레이터를 생성시킨다음,
@Get()
async findOne(@User() user: UserEntity) {
console.log(user);
}
이렇게 간단하게 코드를 작성할 수 있다.
Passing Data
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
export const User = createParamDecorator(
(data: string, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
const user = request.user;
return data ? user?.[data] : user;
}
);
@Get()
async findOne(@User('firstName') firstName: string) {
console.log(`Hello ${firstName}`);
}
첫 번째는 데코레이터 코드, 두 번째는 사용 코드다.
컨트롤러는 @User데코레이터를 통해 특정 속성에 접근하여 그 값을 바꿀 수 있다. 라는 걸 보여주는 사용 코드다.
Author And Source
이 문제에 관하여([TIL] NestJS 공부 15일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ingyocode/TIL-NestJS-공부-15일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)