HttpException
- nest에서 예외처리를 위해 제공되는 클래스이다.
- HttpException을 이용해 Filter를 생성하면, 예외처리에 대한 코드 재사용성을 늘릴 수 있다.(중복되거나 반복되는 예외처리 작성을 크게 줄일 수 있다.)
1) httpException-filter 예시
import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common';
import { Request, Response } from 'express';
@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const request = ctx.getRequest<Request>();
const status = exception.getStatus();
const error = exception.getResponse() as string | { error: string; statusCode: number; message: string | string[] };
if (typeof error === 'string') {
response.status(status).json({
success: false,
statusCode: status,
timestamp: new Date().toISOString(),
path: request.url,
error: error,
});
} else {
response.status(status).json({
success: false,
timestamp: new Date().toISOString(),
...error,
});
}
}
}
- response.status() ~~ 이하 내용을 오버라이딩 하여, 예외처리를 커스텀할 수 있다.
2) httpException-filter 적용 예시
@Get()
@UseFilters(HttpExceptionFilter)
getCats(): string {
throw new HttpException('api is broken', 401);
return this.catsService.getCats();
}
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { HttpExceptionFilter } from './http-exception.filter';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalFilters(new HttpExceptionFilter());
await app.listen(3000);
}
bootstrap();
참고강의