(TIL) 2024-11-21
정영훈 튜터님의 숙제. 간단하게 설명을 하자면 Post method를 호출하여 데이터를 처리할 때 app.js에서 app.use(express.json()); 주석처리하여 강제로 req의 데이터를 구분할 수 없게 만들어 강제 로 오류를 발생 시켰다.
1
2
3
4
5
6
7
8
9
10
11
12
//생략
try {
const {
body: {
todo: { value },
},
} = req;
//생략
} catch (error) {
throw Error('서버 에러 발생');
}
예외 처리를 하였지만 왜 서버가 종료가 되는가? 에 대한 숙제이다.
예외처리 try-catch
프로그램에서 오류가 발생하면 프로그램이 종료된다. 이를 막기 위해 try-catch문(예외처리)를 사용한다.
1
console.log(aaa); //ReferenceError: aaa is not defined 발생
- try-catch문 사용
1
2
3
4
5
try {
console.log(aaa); //미출력
} catch (error) {
console.log('에러 발생'); //출력
}
try구문에서 오류가 발생하면 바로 catch 구문이 호출(실행) 된다. 이를 통해 강제 종료 되는 것을 막을 수 있다.
throw
MDN 문서를 보면 throw는 ‘throw 문은 사용자 정의 예외를 발생(throw)할 수 있습니다. 예외가 발생하면 현재 함수의 실행이 중지되고 (throw 이후의 명령문은 실행되지 않습니다.), 제어 흐름은 콜스택의 첫 번째 catch 블록으로 전달됩니다. 호출자 함수 사이에 catch 블록이 없으면 프로그램이 종료됩니다.’ 라고 적혀있다.
결론
즉 풀어서 설명하자면 catch문 안에서 throw를 통해서 또 다른 오류를 발생 시켰다. 그래서 throw에 대한 예외처리는 안되어 있는 상태라 강제종료가 되었던 것. 해결을 위해서는 throw에 대한 예외처리를 다시 한번 해줘야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//생략
try {
const {
body: {
todo: { value },
},
} = req;
//생략
} catch (error) {
try{
throw Error('서버 에러 발생');
}catch(error){
console.log(`throw Error('서버 에러 발생') 에 대한 예외 처리`)
}
}
This post is licensed under CC BY 4.0 by the author.