Nest에서 모든 예외를 처리하는 예외 레이어가 내장됨.
즉, 애플리케이션 코드에서 예외가 처리되지 않으면 이 예외 레이어에서 계층을 포착해서 예외를 처리한다.

즉, try-catch로 예외처리를 하지 않아도 그냥 예외만 발생시키면 기본 내장 필터(BaseExceptionFilter)가 예외를 처리함.
이 내장 예외는 다음과 같이 응답.
{
"statusCode": 500,
"message": "Internal server error"
}
근데 HttpExceptiop을 발생시킬 때 메시지와 응답 코드를 지정할 수 있음.
@Get()
async findAll() {
throw new HttpException('Forbidden', HttpStatus.FORBIDDEN);
}
즉, 애플리케이션에서는 예외를 던지면 (
throw new HttpExceptio()) 이 예외 필터가 예외를 처리함.
사용자 정의 예외를 발생시킬 수 도 있지만 대부분의 경우에는 필요 없음.
이건 즉 별도의 예외 class로 예외 인스턴스를 생성하는 것
export class ForbiddenException extends HttpException {
constructor() {
super('Forbidden', HttpStatus.FORBIDDEN);
}
}
@Get()
async findAll() {
throw new ForbiddenException();
}
TypeScript의 인터페이스와 추상 클래스는 런타임에 존재하지 않으므로, 의존성 주입 메커니즘에서 식별자로 사용할 수 없습니다.
JavaScript 또는 TypeScript에서 인터페이스와 같은 타입은 런타임에서 제거되므로, 실제 코드 실행 시 그 타입들을 참조할 수 없습니다. 문자열 토큰은 런타임에서도 유지되므로, 이를 통해 필요한 서비스나 객체를 쉽게 참조하고 주입할 수 있습니다.
export interface TokenStrategy {
createTokens(userId: number, username: string);
}
// 이건 됨
{
provide: 'TokenStrategy',
useValue: mockTokenStrategy,
}
// 이건 안 됨
{
provide: TokenStrategy,
useValue: mockTokenStrategy,
}