728x90
Trouble smashing log
Time: 2023-01-18 02:53
doc-id : tsl-v1.2- 20230118
About | Desc |
---|---|
Error msg | TypeError: Converting circular structure to JSON |
Error cause | console.log를 남발해서 발생한 문제 |
Solution | 함수 내 console.log를 제거 |
Problem
Express 서버에서 MongoDB로 음식점 review 데이터를 보낼 때 아래와 같은 에러가 발생했다. circular structure를 JSON으로 바꾸는데 문제가 발생했다는 의미다.
Unable to post review: TypeError: Converting circular structure to JSON
--> starting at object with constructor 'MongoClient'
| property 's' -> object with constructor 'Object'
| property 'sessionPool' -> object with constructor 'ServerSessionPool'
--- property 'client' closes the circle
Cause
문제는 모델 코드 내 디버깅을 위한 console.log를 남발해서 발생한 문제였다. 한 게시글에 따르면 참조된 값들을 로깅하는 것이 circular dependency를 만드는 결과를 초래할 수 있다고 한다.
Solution
모델 내 console.log()를 모두 지워주니 정상적으로 작동된다.
수정 전
// reviewsDAO.js
...
static async addReview(restaurantId, user, review, date) {
try {
console.log(`🐞restaurantId : ${restaurantId},
user : ${user}
review : ${review}
`);
const reviewDoc = {
name: user.name,
user_id: user._id,
date: date,
text: review,
restaurant_id: ObjectId(restaurantId), // 몽고DB 객체 id로 변경한 뒤 저장
};
console.log(`🐞reviewDoc: ${JSON.stringify(reviewDoc)}`);
console.log(`🐞reviews: ${JSON.stringify(reviews)}`);
return await reviews.insertOne(reviewDoc);
} catch (e) {
console.error(`Unable to post review: ${e}`);
return { error: e };
}
}
...
수정 후
static async addReview(restaurantId, user, review, date) {
try {
const reviewDoc = {
name: user.name,
user_id: user._id,
date: date,
text: review,
restaurant_id: ObjectId(restaurantId), // 몽고DB 객체 id로 변경한 뒤 저장
};
return await reviews.insertOne(reviewDoc);
} catch (e) {
console.error(`Unable to post review: ${e}`);
return { error: e };
}
}
Environment
node : 16.17.0
npm
"cors": "^2.8.5",
"dotenv": "^16.0.3",
"express": "^4.18.2",
"mongodb": "^4.13.0"
So what
전혀 예상치 못한 요소로 인해 에러가 발생할 수도 있다.
Related articles
https://www.educative.io/answers/what-is-typeerror-converting-circular-structure-to-json
728x90
'Log > Trouble shoot' 카테고리의 다른 글
Express.js_router 경로 오타 이슈(app -> router) (0) | 2023.02.07 |
---|---|
데이터베이스 컬럼에 대한 논의 (0) | 2023.02.05 |
Expres.js_SequelizeDatabaseError Unknown column 'userId' in 'field list' (0) | 2023.01.15 |
flask_템플릿 엔진 jinja가 무엇인가 (0) | 2022.12.11 |
다중 파라미터 ajax post 요청 후 flask 서버에서 받기 (0) | 2022.12.07 |
댓글