Я пытаюсь выполнить простую операцию CRUD в Couchbase из формы AngularJS, но я продолжаю получать эту ошибку:
TypeError: Converting circular structure to JSON
Вот основные фрагменты от AngularJS и Express.js. Любая помощь будет оценена.
//AngularJS
$http.post('docs', $scope.doc).then(function(res) {
console.log(res);
}, function(err) {
console.log(err);
});
//Express.js
router.post('', function(req, res, next) {
db.upsert('anyname', req.body, function(error, result) {
if (error) {
console.log('operation failed', error);
return;
}
res.send(res);
});
});
Подробная ошибка от терминала:
/Users/name/Workspace/sb-couchbase/node_modules/express/lib/response.js:242
var body = JSON.stringify(val, replacer, spaces);
^
TypeError: Converting circular structure to JSON
at Object.stringify (native)
at ServerResponse.json (/Users/name/Workspace/sb-couchbase/node_modules/express/lib/response.js:242:19)
at ServerResponse.send (/Users/name/Workspace/sb-couchbase/node_modules/express/lib/response.js:151:21)
at /Users/name/Workspace/sb-couchbase/routes/document.js:36:8
Проблема заключалась в простой ошибке Express.js. Конечная точка res.send(res) должна быть res.send (результат). Это поставило проблему.
Так:
//Express.js
router.post('', function(req, res, next) {
db.upsert('anyname', req.body, function(error, result) {
if (error) {
res.send(error);
return;
}
res.send(result);
});
});
Это не вызвано Couchbase, а путем преобразования вашей объектной сетки в JSON. Если объект a содержит ссылку на объект b, а b содержит ссылку на (возможно, через некоторые промежуточные объекты), из этого получится бесконечная строка JSON.
Разнообразные решения для этого обсуждались, например, в ошибке Chrome sendrequest: TypeError: преобразование круговой структуры в JSON.