Contents

error log - throw와 return

Contents

문제상황

Failure
  1. 에러핸들링 중, 에러메세지를 response로 보내려고 한다.
  2. 이에 return을 사용
  3. 에러가 나와야 할 상황에서 정상적으로 에러메세지를 response로 보낸다.
  4. 하지만 에러코드를 알려야 할 status code는 정상을 알리며 이후 모든 함수와 명령이 진행됨

 

해결

Success
return이 아닌 throw를 사용하여야 한다.

 

특히 node.js에서 서버를 돌릴때,
단순히 return만으로는 이후의 모든 과정, 즉 controller - service - dao 등에서 return을 한 함수 이외 모든 명령어가 진행 된다.
 

하지만 throw의 경우, 에러를 내보내는 것 뿐만 아니라 이후의 모든 명령어를 중지시킨다.
단순히 response창만 봤다가는 정상적으로 에러를 잡는것 같지만 실제 잘못된 데이터들이 계속해서 DB에 쌓이는걸 볼 수 있다.
 

문법의 기본 의미를 더 살펴보게 된다.

return1

return 명령문 은 함수 실행을 종료하고, 주어진 값을 함수 호출 지점으로 반환합니다.

 

throw2

** throw ** 문은 사용자 정의 예외를 발생(throw)할 수 있습니다.
예외가 발생하면 현재 함수의 실행이 중지되고 (throw 이후의 명령문은 실행되지 않습니다.),
제어 흐름은 콜스택의 첫 번째 catch 블록으로 전달됩니다. 호출자 함수 사이에 catch 블록이 없으면 프로그램이 종료됩니다.

 

얼핏 보면 둘 다 현재 함수의 실행을 중지한다는 부분에서 유사하게 보일 수 있다.
하지만 MDN 문서 중 throw 설명의 두번째 줄.
 

Note
** throw 이후의 명령문은 실행되지 않습니다. **

 

이 부분을 다시 살펴보게 된다.