Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I am using request package for node.js

Code :

 var formData = ({first_name:firstname,last_name:lastname,user_name:username, email:email,password:password});
  request.post({url:'http://localhost:8081/register', JSON: formData}, function(err, connection, body) {
exports.Register = function(req, res) {
    res.header("Access-Control-Allow-Origin", "*");
    console.log("Request data " +JSON.stringify(req));

Here I am getting this error :

TypeError: Converting circular structure to JSON

Can anybody tell me what is the problem

I am not able to get from here. can u pls tell me what changes i need to made in above code – Hitu Bansal Nov 24, 2014 at 9:18 Does this answer your question? How can I print a circular structure in a JSON-like format? – KyleMit Jul 14, 2020 at 20:02

JSON doesn't accept circular objects - objects which reference themselves. JSON.stringify() will throw an error if it comes across one of these.

The request (req) object is circular by nature - Node does that.

In this case, because you just need to log it to the console, you can use the console's native stringifying and avoid using JSON:

console.log("Request data:");
console.log(req);
                I want to extract a token present in req object, so is there a way to extract this or convert the req object to json without using the external library mentioned in the below answer.
– Rahul
                Feb 6, 2020 at 8:58
                well i this is the req object that i have pastebin.com/i1yyaUaB and i am trying to access access_token field in session.keycloak-token. How can i access that. Thanks for the help.
– Rahul
                Feb 6, 2020 at 9:55

Try using this npm package. This helped me decoding the res structure from my node while using passport-azure-ad for integrating login using Microsoft account

https://www.npmjs.com/package/circular-json

You can stringify your circular structure by doing:

const str = CircularJSON.stringify(obj);

then you can convert it onto JSON using JSON parser

JSON.parse(str)
                As their page says, I guess we can use github.com/WebReflection/flatted#flatted flatted from now
– Dinesh Nadimpalli
                Apr 15, 2020 at 12:25

I was able to get the values using this method, found at careerkarma.com Output looks like this.

I just run this code in the debugger console. Pass your object to this function.
Copy paste the function also.

 const replacerFunc = () => {
    const visited = new WeakSet();
    return (key, value) => {
      if (typeof value === "object" && value !== null) {
        if (visited.has(value)) {
          return;
        visited.add(value);
      return value;
  JSON.stringify(circObj, replacerFunc());

I forgotten to use await keyword in async function. with the given systax

blogRouter.put('/:id', async (request, response) => {
  const updatedBlog = Blog.findByIdAndUpdate(
    request.params.id,
    request.body,
    { new: true }
  response.status(201).json(updatedBlog);

Blog.findByIdAndUpdate should be used with the await keyword.

use this https://www.npmjs.com/package/json-stringify-safe

var stringify = require('json-stringify-safe');
var circularObj = {};
circularObj.circularRef = circularObj;
circularObj.list = [ circularObj, circularObj ];
console.log(stringify(circularObj, null, 2));
stringify(obj, serializer, indent, decycler)

It's because you don't an async response For example:

app.get(`${api}/users`, async (req, res) => {
    const users = await User.find()
    res.send(users);
                It seems like it is the JSON.stringify call that is the problem and so the console.log line
– FruitBreak
                Feb 12, 2021 at 16:57
                I was also facing a similar issue, because of not using await before calling response.send()
– Wasit Shafi
                Apr 23, 2022 at 17:18

This is because JavaScript structures that include circular references can't be serialized with a"plain" JSON.stringify.

https://www.npmjs.com/package/circular-json mentioned by @Dinesh is a good solution. But this npm package has been deprecated.

So use https://www.npmjs.com/package/flatted npm package directly from the creator of CircularJSON.

Simple usage. In your case, code as follows

import package

// ESM
import {parse, stringify} from 'flatted';
// CJS
const {parse, stringify} = require('flatted');
console.log("Request data " + stringify(req));

I was also getting the same error, in my case it was just because of not using await with Users.findById() which returns promise, so response.status().send()/response.send() was getting called before promise is settled (fulfilled or rejected)

Code Snippet

app.get(`${ROUTES.USERS}/:id`, async (request, response) => {
    const _id = request.params.id;
    try {
        // was getting error when not used await
        const user = await User.findById(_id);
        if (!user) {
            response.status(HTTP_STATUS_CODES.NOT_FOUND).send('no user found');
        } else {
            response.send(user);
    } catch (e) {
        response
            .status(HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR)
            .send('Something went wrong, try again after some time.');

This error message "TypeError: Converting circular structure to JSON" typically occurs when you try to stringify an object that contains circular references using JSON.stringify().

A circular reference occurs when an object references itself in some way. For example, consider the following code:

const obj = { foo: {} };
obj.foo.obj = obj;

In this example, obj contains a circular reference because the foo property of obj contains a reference to obj itself.

When you try to stringify an object like this using JSON.stringify(), it will fail with the error message "TypeError: Converting circular structure to JSON".

To solve this issue, you can use a third-party library like flatted or circular-json, which are specifically designed to handle circular references in JavaScript objects. Here's an example using flatted:

const flatted = require('flatted');
const obj = { foo: {} };
obj.foo.obj = obj;
const str = flatted.stringify(obj);
console.log(str);

In this example, we use flatted.stringify() instead of JSON.stringify(), and it successfully converts the object to a string without throwing an error.

Alternatively, you can modify your object to remove the circular reference before trying to stringify it. For example:

const obj = { foo: {} };
obj.foo.bar = 'baz';
// add circular reference
obj.foo.obj = obj;
// remove circular reference
obj.foo.obj = undefined;
const str = JSON.stringify(obj);
console.log(str);

In this example, we add the circular reference and then remove it before trying to stringify the object. This approach works well if you don't need to preserve the circular reference in the stringified object.

This question is asked more than 8 years ago and it has an accepted answer. Please add some details about the reason you are adding a new answer – MD Zand Nov 29, 2022 at 20:26

For mongodb

so if you are getting errors while fetching data from MongoDB then the problem is async

previously

app.get('/users',(req,res,next)=>{
 const user=chatUser.find({});
 if(!user){
 res.status(404).send({message:"there are no users"});
 if(user){
 res.json(user);

After

app.get('/users',async(req,res,next)=>{
 const user=await chatUser.find({});
 if(!user){
 res.status(404).send({message:"there are no users"});
 if(user){
 res.json(user);

Edit May 22, 2023

I think it is an error which need to be fixed not a feature which is needed. I have faced this issue and tried following things. Hope it helps.

  • The reference does not have resolved value till the time, we are going to use it. In this case, I have awaited the response, by adding await keyword and checking whether I am returning proper value from the function.

  • In the second case when I faced this issue I had a json like,

    obj1: "sample1", obj2: "sample2", obj3: obj3 obj1: "sample1", obj2: obj1

    in this case, the value of any of the key in object is again depended on some other key, which was growing the json object recursively. Here, I fixed this dependency of one key on another to resolve it.

    This does not really answer the question. If you have a different question, you can ask it by clicking Ask Question. To get notified when this question gets new answers, you can follow this question. Once you have enough reputation, you can also add a bounty to draw more attention to this question. - From Review – Ethan Apr 30, 2022 at 0:13
  •