2015-05-16 1 views
0

У меня есть объект JSON в моем файле node.js, который содержит циклические ссылки. Для того, чтобы отправить эти данные в браузер, я использовал модуль НОГО circular-json для stringify объекта и сериализацией круговых ссылок:Parse JSON, сериализованный CircularJSON

var CircularJSON = require("circular-json"); 
app.get("/api/entries", function(req, res){ 
    contentClient.entries({"content_type": "xxxxxxxxxxx"}, function(err, entries){ 
    if (err) throw err; 
    res.send(CircularJSON.stringify(entries)); 
    }); 
}); 

Это прекрасно работает и отправляет сериализованные данных через res.send(); Теперь в моей внешнем интерфейсе угловой коды нужно чтобы использовать циркулярные ссылки. Один из сериализованных полей объекта выглядит следующим образом на стороне клиента: "~0~fields~twitter~1"

Я попытался следующий в браузере:

  1. скопировал версию circular-json.js на мой фронтэнда сайт
  2. Linked к сценарий в моем index.html как так: <script src="/framework/lib/circular-json.js"></script>
  3. Установите переменную CircularJson следующим образом: var CircularJSON = window.CircularJSON;
  4. Разбирает ин приходит JSON выглядеть примерно так:

    $http.get("/api/entries").then(function(res){ console.log(CircularJSON.parse(res.data[0])); });

Я получаю следующее сообщение об ошибке: SyntaxError: Unexpected token o

+0

Возможно, вам придется использовать одну и ту же библиотеку на клиенте. –

+0

@FelixKling Yeh Я так думаю, но я не могу понять, как это сделать. Я следовал за их проводниками, но это не сработало. – Coop

+0

Если вы публикуете то, что попробовали, и объясните, в чем проблема, мы можем вам помочь. –

ответ

0

За одно время вызова я думаю, вы можете использовать $ HTTP следующим

function appendTransform(defaults, transform) { 

    // We can't guarantee that the default transformation is an array 
    defaults = angular.isArray(defaults) ? defaults : [defaults]; 

    // Append the new transformation to the defaults 
    defaults.unshift(transform); 
    return defaults; 
} 

$http({ 
    url: '...', 
    method: 'GET', 
    transformResponse: appendTransform($http.defaults.transformResponse,    function(value) { 
    return CircularJSON.parse(value); 
    }) 
}); 

Or для каждого вызова вы можете определить перехватчики, примеры приведены здесь: https://docs.angularjs.org/api/ng/service/ $ http

UPDATE: Unshift не возвращает массив. Изменен код, теперь он должен работать.

+0

Это, похоже, не работало для меня. Он бросает ту же ошибку – Coop

+0

сделал plnkr, вы можете проверить его здесь http://plnkr.co/edit/uXgTzs8e7fJLyWzFPTKX?p=preview – lyttlegy

+0

Любые обновления по этой проблеме? – lyttlegy