노드에서의 예외
- 예외(Exception) : 처리하지 못한 에러
- 노드는 싱글 스레드이기 때문에 에러를 처리하지 못하면 프로세스 자체가 멈추게 된다.
예외 처리 방식
에러가 발생할 만한 곳을 try catch로 감싼다.
setInterval(() => {
console.log('시작');
try {
throw new Error('에러 발생시키기');
} catch (err) {
console.error(err);
}
}, 1000);
- 모든 곳에 위처럼 처리할 필요는 없음(try catch를 써야되는 곳과 안써도 되는 곳을 구분할 줄 알아야 함)
fs 모듈같은 경우 콜백 함수에서 error 객체를 제공하기 때문에 try, catch를 사용하지 않아도 된다.
const fs = require('fs');
setInterval(() => {
fs.unlink('./abcdefg.js', (err) => {
console.error(err);
});
}, 1000);
- node 실행하면 에러가 반복해서 콘솔에 찍힘(프로세스가 멈추지 않음)
- node에서 비동기 모듈의 콜백 함수에서의 에러는 프로세스를 멈추지 않는다.
모든 에러를 한 곳으로 모아서 처리시키는 방법
process.on('uncaughtException', (err) => {
console.error('에러 발생', err);
});
- 위와 같이 하면 에러가 발생해도 프로세스가 멈추진 않음
- 단, 콜백 함수의 동작이 보장되지 않기 때문에 에러 내용 기록용으로만 사용해야 함.
에러를 처리하는 가장 좋은 자세는 빠르게 에러 발생 위치와 원인을 파악해서 코드를 고치고 서비스를 재시작해야 함.
프로세스 종료 명령어
$ netstat -ano | findstr 포트
$ taskkill /pid 프로세스아이디 /f