一. 前言
最近在使用 NodeJS 搭建后台服务器时遇到的错误,本来是打算弄一个服务器方便统一请求网络 api 的,没想到碰到这个问题,赶紧进入正题
二. 报错信息
TypeError: Converting circular structure to JSON
翻译:
类型错误
:将循环结构转换为 JSON
举个例子:
// 报错代码
// 两个引用传递中地址进行了交叉
let a = { b:{} };
let b = { a };
a.b = b; // 循环引用
JSON.stringify(b); // 触发报错
三. 什么是循环引用
原理:循环引用指的是对象 A 中包含对对象 B 的引用,而同时对象 B 中也包含了对对象 A 的引用
当发生了循环引用时,执行一些操作(例如序列化对象)可能会出现问题
四. 分析
当时在想平时也是用 JSON.stringify( ) 将请求的数据进行转化的为啥,突然会出现这种情况,我再次分析了处理返回数据的流程,发现是由于自定义的数据模型内部赋值的原因导致的
因为 node服务器请求的数据返回转化时包含了循环引用的对象转换为 JSON 字符串,而默认的 JSON.stringify 方法无法处理循环引用,从而导致出现该错误。
五. 解决方法
1. 找到出现循环引用的代码,然后修改(有点废话)
2. 安装第三方库
- 例如 json-stringify-safe
const stringify = require('json-stringify-safe')
stringify(数据, null, 2)
- flatted 库
- circular-json库