오늘은 nestjs에서 예외처리를 어떻게 해야할지 알아본걸 정리하려 한다.
스파르타에서 지급된 강의자료에 보면,
throw new BadRequestException()
이렇게 처리하고 있는데, 이 경우 express 에서처럼 에러핸들링을 어떻게 해야할지 감이 안잡혔다.
일단 위와 같이 처리를 하게 되면 상태코드를 가지고 있어서 상태코드를 적지 않아도 되지만,
다른 에러들 까지 함께 처리해 줄 수 있도록 express의 미들웨어 같은걸 걸고싶었다.
방법이 있었는데 바로 HttpExceptionFilter이다.
import { ArgumentsHost, Catch, ExceptionFilter } from '@nestjs/common';
import { Response } from 'express';
//예외처리
@Catch()
export class HttpExceptionFilter implements ExceptionFilter {
// 임플리 먼츠 하면 캐치가 들어올 수 밖에 없음.
catch(exception: any, host: ArgumentsHost) {
const ctx = host.switchToHttp(); //실행컨텍스트 에서 res객체 가져옴.
const response = ctx.getResponse<Response>(); //실행컨텍스트 에서 res객체 가져옴.
const status = exception.getStatus(); //exception에서 에러번호와 에러 내용가져옴.
const err = exception.getResponse() as
| { message: any; statusCode: number }
| { error: string; statusCode: 400; message: string[] }; //exception에서 에러번호와 에러 내용가져옴.
//클래스 벨리데이터 오류인 경우
if (typeof err !== 'string' && err.statusCode === 400) {
return response.status(status).json({
success: false,
code: status,
data: err.message,
});
}
//만든 에러인 경우
if (typeof err !== 'string') {
response.status(status).json({
success: false,
code: status,
data: err.message,
});
}
throw new Error('Method not implemented.');
}
}
main.ts에도 이렇게 걸어준다.
app.useGlobalFilters(new HttpExceptionFilter());
'TIL' 카테고리의 다른 글
24/01/13 TIL __ cache를 사용하기 위한 전략 (0) | 2024.01.13 |
---|---|
24/01/11 TIL __ 트렐로 만들기 회고 (0) | 2024.01.11 |
24/01/04 TIL __ cache (1) | 2024.01.05 |
24/01/03 TIL __ nest js에서 passport (local) (1) | 2024.01.03 |
24/01/02 TIL __ nest에서 swagger 사용하기 (0) | 2024.01.02 |