转发axios响应时出现Converting circular structure to JSON错误的原因是什么
错误触发原因解释
核心问题是你错误将完整的Axios响应对象直接序列化返回,该对象内置存在循环引用的字段,无法转换为JSON格式
具体触发逻辑如下:
await axios.put()的返回值是Axios封装的完整响应对象,并非第三方接口返回的原始业务数据。除了业务数据外,该对象还包含请求配置、底层请求实例、响应头、HTTP状态码等附加字段,结构示意:
{ data: {}, // 第三方接口返回的原始业务数据,无循环引用 status: 200, statusText: 'OK', headers: {}, // 响应头集合 config: {}, // 发起Axios请求时的全量配置,部分字段会引用对应的请求实例 request: {} // 底层HTTP请求实例,浏览器环境为XMLHttpRequest实例,Node环境为http.ClientRequest实例,内置大量循环引用:例如请求实例的response属性会直接指回当前这个Axios响应对象本身 }
- 调用
res.json(ax)时,你使用的Web框架会自动调用JSON.stringify()对传入的ax对象做序列化处理。JSON.stringify本身不支持处理存在循环引用的结构(即A对象的属性指向B,B的属性又指回A的嵌套引用关系),遍历到request或config字段中的循环引用关系时,就会抛出你遇到的TypeError: Converting circular structure to JSON错误。
修复方案
如果只需要返回第三方接口的业务数据,直接提取ax.data字段返回即可:
const userController = async (req,res)=>{ const ax = await axios.put(someURL, reqBody) res.status(200).json(ax.data) }
如果需要同时返回HTTP状态码、响应头等信息,手动提取需要的字段即可,不要直接返回完整的Axios响应对象。
内容的提问来源于stack exchange,提问作者Altair21
相关产品推荐
相关产品推荐

