본문 바로가기

T.I.L

23-07-12 throw 문으로 에러 지정하기

문제설명

계층형 아키텍쳐를 설계하는 중 if의 결과인 return을 통해서 코드를 빠져나오고 싶다.
예전까지는 return res.status(400)을 통해서 빠져나왔지만 계층형 아키텍쳐의 service는 req,res를 사용하지 않는다.
그래서 다른 방식으로 진행 중인 코드를 빠져나와야 한다.

시도

계층형 아키텍쳐가 설계된 코드를 찾아보았다. 그 중 하나의 예시에서 if의 조건을 throw new Error이라는 문법을 사용했다.처음보는 문법이기 때문에 검색해서 공부해보았다. throw문은 사용자가 직접 지정하는 예외라고 볼 수 있다. 그리고 그 예외가 발생하면 함수가 중지되는 기능을 한다. 마치 if 반복문의 break와 비슷한 역할을 한다고 생각했다.

해결

문법은 간단했다. 

예전의 if문은 

if (!user) {
            return res.status(400).json({ errorMessage: "존재하지 않는 유저입니다." });
        }

이런 식으로 res를 통해서 에러메세지를 보냈었지만

throw문은

if (!emailReg.test(email)) {
        throw new Error("이메일 형식이 일치하지 않습니다.");
      }

이런 방식으로 에러메세지를 보낼 수 있다.

Error객체를 통해서 해당 에러의 콜 스텍 정보가 console에 같이 출력이 된다.

 

res를 사용할 수 없는 이유는 계층형 아키텍쳐의 service 부분의 async가 res,req로 정보를 받아오고 보내는 방식이 아니었기 때문에 res를 사용하면 res is undefined 에러가 나온다.  

알게된 점

맨 처음 데이터가 제대로 안 보내져서 확인한 결과 res is undefined 에러가 발생했다. 이를 통해서 req,res의 매개변수가 없다면 res를 사용할 수 없다는 점을 알았다.

throw를 통해서 사용자가 직접 예외를 지정해서 코드를 빠져나올 수 있는 방법을 알았다.

Error객체는 해당 에러의 콜 스텍 정보를 console에 출력시키는 기능이 있다는 것을 알았다.