프로젝트사용에 앞서 폴더를 하나 만들어준다.
그리고나서 그 폴더에 파일을 하나 만든뒤 class를 만들어준 뒤, Error를 extends 한다.
extends를 하면 같이 쓰는게 있는데 그것은 바로 super 이다. 확장을 하면서 같이 쓰는걸로 알고 있는데, 내가 아는 정보는 아주 정확한 정보가 아닌거 같고, 대충 흐름을 이해했기에 말로 설명은 어려운것 같다...
아무튼 이렇게 진행을 하다보면
class CustomError extends Error {
constructor(message, status) {
super(message);
this.status = status;
}
}
이렇게 완성이 되는데, 여기에서 예시로 "계층형 아키텍쳐" 로 설명을 하겠다.
계층형 아키텍처로 파일을 구성한다면 controller , service , repository 이렇게 있는데 실제로 서비스 로직을 실행하는곳인,
service 파일로 가서 작성을 하는데 어떻게 하냐면,
우리는 평소에 에러를 반환 할때
i f ( user ) return res.status(404).json({ message: "오류발생"}) 이런식으로 작성을 하게 된다.
하지만 CustomError를 사용하게 된다면 if문을 쓰는것은 같다.
if (!items || !itemOption) throw new CustomError("itemId와 optionId를 확인해주세요.", 404);
이런식으로 if 문 안에는 조건을 걸어주고 뒤에서 차이가 있는데 throw를 사용하면서 controller 쪽에 있는 catch문쪽으로 오류를 반환한다고 생각하면 된다. 그리고 new CustomError를 적고 뒤에 소괄호안에는 반환하려는 메세지와 그뒤엔 콤마( ,)를 찍고 응답신호를 보내려는 status를 적으면 끝! 이 난다.
이런식으로 에러핸들링을 하게되면 엄청 간편하고 코드 가독성도 좋아지는것 같아서 추천을 한다.