关于报错 TypeError: Converting circular structure to JSON

一. 前言

最近在使用 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库

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/19ba78c7e1.html