Exception Filter
Nest에는 애플리케이션 전체에서 처리되지 않은 모든 예외를 처리하는 예외 계층이 내장되어 있습니다. 예외가 애플리케이션 코드에서 처리되지 않으면 이 계층에서 예외를 포착하여 적절한 사용자 친화적인 응답을 자동으로 전송합니다.
예외 계층을 완전히 제어하고 싶을 수도 있습니다. 예를 들어 로깅을 추가하거나 일부 동적 요인에 따라 다른 JSON 스키마를 사용하고 싶을 수 있습니다.
예외 필터는 바로 이러한 목적을 위해 설계되었습니다. 예외 필터를 사용하면 정확한 제어 흐름과 클라이언트에 다시 전송되는 응답의 내용을 제어할 수 있습니다.
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();
response.status(status).json({
success: false,
error,
statusCode: status,
timestamp: new Date().toISOString(),
path: request.url,
});
}
}
exception을 통해 에러 객체에 접근할 수 있습니다.
Exception Filter 적용
메소드 레벨에서의 적용
@Get()
@UseFilters(HttpExceptionFilter)
getAllCat() {
throw new HttpException('api broken', 401);
return 'all cats';
}
// cats.controller.ts
컨트롤러 레벨에서의 적용
@UseFilters(new HttpExceptionFilter())
export class CatsController {}
// cats.controller.ts
전역 레벨에서의 적용
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalFilters(new HttpExceptionFilter());
await app.listen(3000);
}
bootstrap();
// main.ts
'개발 공부 > NestJS' 카테고리의 다른 글
Serialize 직렬화 (0) | 2023.03.23 |
---|---|
인터셉터 Interceptor (0) | 2023.03.19 |
파이프 Pipe (0) | 2023.03.19 |
미들웨어 Middleware (0) | 2023.03.19 |
Configuration (0) | 2023.03.12 |