문제설명
계층형 아키텍쳐를 설계하는 중 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에 출력시키는 기능이 있다는 것을 알았다.
'T.I.L' 카테고리의 다른 글
23-07-18 js와 html의 연동 (0) | 2023.07.18 |
---|---|
23-07-13 계층형 아키텍쳐의 매게변수가 1개만 들어가는 경우 (0) | 2023.07.14 |
23-07-10 갑자기 티스토리 관리자 페이지or 티스토리 메인 페이지에 접속이 안된다면? (0) | 2023.07.10 |
23-06-29 js에서 fetch로 POST보내기 (0) | 2023.07.09 |
23-06-27 T.I.L github fork (0) | 2023.06.27 |