Error Log - Throw와 Return
Contents
문제상황
Failure
- 에러핸들링 중, 에러메세지를 response로 보내려고 한다.
- 이에
return
을 사용 - 에러가 나와야 할 상황에서 정상적으로 에러메세지를 response로 보낸다.
- 하지만 에러코드를 알려야 할 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
이후의 명령문은 실행되지 않습니다. **이 부분을 다시 살펴보게 된다.
Related Content
- Error Log - EC2에서 PM2 실행시 NODE_ENV 설정 명령어
- 백엔드 - Typescript-Express 환경에서 Jest 및 Node 환경에 따라 Dotenv 설정 분리
- Error Log - TypeORM을 DotEnv로 연결하여 설정시 TypeScript에서의 Type Error
- 브라우저에서 ChatGPT 프롬프트 입력창이 먹통일때 해결방법
- TypeORM 시간대 설정에 관한 고찰 - TypeORM의 DateStrings와 Timezone 옵션에 따른 시간대 혼란