본문 바로가기
Log/Trouble shoot

mongoDB 에러_ Converting circular structure to JSON

by RIEM 2023. 1. 18.
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

댓글