-
Nest.js Exception FilterFrameWork/Nest.js 2022. 7. 11. 16:51
Exception Filters
service의 형태의 따라 errorMessage를 custom해 줄 필요가 발생할 수 있다.
Error Message Custom
Error Message Overriding
HTTP Exception 할 때 마다 success 속성이 동일하게 들어가고 message형식만 달라지는 형식 만들고 싶다면 각기 다른 url에 매칭된 함수마다 오버라이딩된 HTTP Exception을 반복적으로 적어 주어야한다.
Exception 처리들이 어느 구간에서 모아서 처리할 수 있다. 즉 filtering을 겉쳐서 재사용성을 높인 형태에서 Response로 반환하여 사용할 수 있는 것이다.
Http-Exception Filter(provider side)
위 코드에 있는 response와 status그리고 json은 express에서도 자주 볼 수 있는 형식이다.
괄호안에 status는 메소드 실행 중 에 발생한 실제 status를 받아서 넣어주고, .send되는 message를 json형식으로 한정 시킨 것이다.
*ctx = context를 의미한다.
Http-Exception Filter(consumer side)
1. 각각의 메서드에 대해 적용
@UseFilter() 데코레이터를 사용해서 해당하는 filter를 괄호안에 인자로 넘겨준다. 그리고 함수안에서 exception이 발생하게 되면 해당하는 exception이 데코레이터의 인자로 적힌 filter로 넘어가서 filtering 결과가 response로 반환이 된다.
2. Controller 전반에 대해 적용
3.전역에서 적용
app인스턴스에 포함된 .useGlobalFilter()메서드에 인자로 해당하는 filter class를 새로운 인스턴스 형태로 생성해서 넣어주면, app전체에 전역으로 해당 filter가 적용된다.
JSON형태로 전달된는 Error Message
exception 인스턴스에 .getResponse() 메소드로 HttpException 인스턴스가 만들어 질때 전달한 message를 전달 받을 수 있고 Custom Exception Filter인 HttpExceptionFilter에서는 이 message를 error 변수에 넣어서 Error를 Response하는 json 객체에 error 속성으로 넣는다.
String 형태로 전달 되는 Error Message
exception.getResponse로 전달 받는 error는 Object 혹은 String 형태로 받을 수 있다. error를 Object로 전달 받으면, nest자체에서 error 속성의 값으로 json 형식을 전달하지만, error가 string일 경우는 url과 매칭된 메서드에서 exception message로 인자 값을 넣어서 발생 시킨 경우는 error의 값이 string 문자열로 response 된다.
'FrameWork > Nest.js' 카테고리의 다른 글
Nest.js Intercepters(AOP 패턴) (0) 2022.07.24 Nest.js Pipes(변환, 유효성 검사) (0) 2022.07.11 Nest.js Logger Middleware(provider,consumer) (0) 2022.07.10 Nest.js-TypeOrm 관계 (0) 2022.07.07 JWT와 로그인 서비스& 순환 참조 모듈 (0) 2022.07.03