javascriptnode.jsexpresspugcircular-reference

Passing an object with circular references from server to client-side Javascript while retaining circularity


I'm trying to pass an object with circular references from node.js server to client-side javascript.

Server (node.js):

var object = { circular: object }
//....
app.get('/', function(req, res){    
    res.render('index.jade', {object: object});
});

Client-side Jade/Javascript

script var object = !{JSON.stringify(object)};

Here I get the error that object contains circular references.

Any way to get the object in client-side javascript, with or without circular references?


Solution

  • Douglas Crockford has a solution for this that I have successfully used to solve this problem before: Cycle.js

    instead of just using stringify and parse you would first call decycle and restore with retrocycle

    var jsonString = JSON.stringify(JSON.decycle(parent));
    var restoredObject = JSON.retrocycle(JSON.parse(jsonString));
    

    JSFiddle