关于报错 TypeError: Converting circular structure to JSON

文章讲述了在使用NodeJS构建后台服务器时遇到的TypeError:ConvertingcircularstructuretoJSON错误,该问题由循环引用引起。作者分析了错误产生原因,通常是由于数据模型内部赋值导致。文章提供了两种解决方案:一是直接修改引发循环引用的代码,二是使用如json-stringify-safe等第三方库来处理循环引用的问题。
摘要由CSDN通过智能技术生成

一. 前言

最近在使用 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库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值