방명록
- [Node.js][TROUBLESHOOTING] 객체에 엉뚱한 속성이???2024년 04월 19일 11시 33분 14초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
1. 객체에 엉뚱한 속성이???
구동 중인 Node.js로 작성한 배치 서버에서 DB에 저장한 값이 간헐적으로 비정상적인 경우가 발견되었다. 콘솔에 에러 로그를 찍어 보았더니 다음과 같았다.
YouError: WHERE parameter "apmac_id" has invalid "undefined" value
이 문제의 특이한 점은 정상적인 객체가 전달되다가 간헐적으로 이러한 에러가 발생한다는 것이다.
2. const 사용을 잊지 말자!
해당 속성이 없다는 에러가 발생하는 경우에 어떤 데이터가 오는지 콘솔에 찍어보았다. 정상적인 경우와 비정상적인 경우의 예는 아래와 같다.
{ apmac_id: 1, count: 92 } // 정상 { fromAP_id: 92, toAP_id: 89, count: 6 } // 비정상
그렇다면 비정상적인 경우의 객체는 도대체 어디에서 오는 것일까?
확인해 보니 다른 함수에서 초기화된 값이었다. 어떻게 다른 블록 스코프의 변수 값이 여기까지 오게 된 걸까? 해당 코드는 for of문을 사용하고 있었고 이터러블 객체는 각각 다른 식별자를 가지고 있었지만 순회하면서 생성된 변수명은 data로 동일했다. 예를 들면 다음과 같이 작성되어 있었다.
for (data of iterable1) { (생략) } for (data of iterable2) { (생략) } for (data of iterable3) { (생략) }
결론, data는 블록 안에서만 사용되어야 하는데 위 코드에서는 전역변수로 작동되었고, 해당 블록에 data가 없을 경우에는 data 없이 순회되어야 하는데-data 값이 존재하는-다른 블록의 data에 접근하게 되어 간헐적으로 data가 꼬여버리는 현상이 발생하였던 것이다. 아래와 같이 수정하여 해피엔딩으로 마무리할 수 있었다.
for (const data of iterable) { (생략) }
728x90반응형'언어·프레임워크 > Node.js' 카테고리의 다른 글
[Node.js] 다중 환경 변수 .env 설정 (0) 2024.11.04 [Node.js] 시퀄라이즈로 컬럼 또는 테이블 추가 방법 (2) 2024.06.11 [Node.js] MySQL 날짜, 시간이 왜 UTC 시간으로 조회될까? (0) 2024.01.29 [Node.js] API 서버에 api-key 적용 및 Swagger 문서화 (0) 2024.01.25 [Node.js] Swagger을 이용한 API 문서 생성 (0) 2024.01.24 다음글이 없습니다.이전글이 없습니다.댓글