Nodejs
[Nodejs] PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR
Satisfaction
2021. 5. 18. 20:53
mysql 모듈을 사용하던 중 발생한 오류이다.
동일한 코드였으나 어느 순간 갑자기 이 오류가 발생하기 시작했는데,
문제는 AFTER_FATAL_ERROR이라면서 이전에 오류는 찍히지도 않았다.
모듈 버전이나 노드의 버전이 바뀌면서 뭔가 변경점이 생긴 것 같다.
원인
메시지 원인처럼 쿼리 실행 전 커넥션에 무언가 치명적인 오류가 생긴 경우이다.
찾아보니 커넥션이 이루어진 후 일정 시간동안 쿼리가 발송되지 않으면 자동으로 커넥션이 종료된다고 한다.
커넥션이 끊긴 후 쿼리를 보내려고 하니, 위와 같은 오류가 발생하는 것이다.
해결법
커넥션이 끊기지 않게 하기 위해 코드블럭을 다음과 같이 변경한다
const preventClosingConnection= ()=>{
database.query('SELECT 1').catch(e=> console.error(e));
};
const intervalId= setInterval(preventCloseingConnection, 5* 1000);
// Your code block is here....
clearInterval(intervalId);
이렇게 하면 database관련 작업을 하지 않더라도 무의미한 더미 쿼리를 계속 보내기 때문에 자동으로 커넥션이 끊어지는 것을 방지한다.
또한 프로그램 실행을 마쳤을 때, 정상적으로 종료될 수 있도록
마지막에 clearInterval로 타이머를 종료시켜줘야 한다.