서버와 클라이언트 모두 프로젝트 과정에 있어서 에러처리는 중요하다.
try~catch 문을 통해 우리는 에러를 잡고, throw를 통해서 에러를 던지기도 한다.
하지만 error의 constructer로 들어가는 인자는 message 하나로, 모든 에러를 Error로만 사용하면 어떤 에러가 발생하는지에 대한 예측이 힘들 뿐더러, 메세지 하나로 에러의 모든 사항에 대해 말해야 하기 때문에 매번 메세지를 넣어야 하는 번거로움이 생긴다.
이러한 문제를 해결하기 위해 기존의 Error를 상속받아 커스텀 에러 클래스를 만듦으로써 어디에서 에러가 발생했는지를 명확하게 명시하고 관리해야 한다.
에러 상속받기
class Error {
constructor(message) {
this.message = message;
this.name = "Error"; // (name은 내장 에러 클래스마다 다릅니다.)
this.stack = <call stack>; // stack은 표준은 아니지만, 대다수 환경이 지원합니다.
}
}기존의 에러는 이런 식으로 생겼다.
message, name, stack 프로퍼티만을 가진다.
이 에러의 간단한 구조는 나중에 super()를 통해 상속받는 클래스의 생성자를 호출하기도 쉽다
export class DBError extends Error {
constructor(message) {
super(message);
this.name = "DBError";
}
}이런 식으로 DB에러의 경우는 Error 객체의 name property를 바꿔줌으로써 어디서 문제가 생겼는지에 대해서 명확히 할 수 있다.