如何解决 NodeJS 中的“TypeError:将循环结构转换为 JSON”
Posted
技术标签:
【中文标题】如何解决 NodeJS 中的“TypeError:将循环结构转换为 JSON”【英文标题】:How do I solve "TypeError: Converting circular structure to JSON" in NodeJS 【发布时间】:2020-02-03 23:40:11 【问题描述】:我正在使用 React。为了从我的 mysql 数据库中查询一些数据,我创建了另一个 NodeJS 后端服务器并编写了这段代码。
var con = mysql.createConnection(
host: "localhost",
port: "3306",
database: "my_books",
user: "root",
password: "pokemon2345"
);
con.connect();
var sql = JSON.parse(req.query.msg);
console.log(sql);
var answer = con.query(sql);
con.end();
res.send(JSON.stringify(answer));
这是我在 React 主应用程序中的代码。
var request = new XMLHttpRequest();
var jsql = JSON.stringify(sql);
request.onreadystatechange = function()
debugger;
if (this.readyState == 4 && this.status == 200)
var response = this.responseText;
toast.success(typeof response);
;
request.open(
"GET",
"http://localhost:3001/retrieve_books" + "?msg=" + jsql,
true
);
request.send(jsql);
我无法弄清楚为什么会发生这个错误以及我的代码是如何循环的? 提前致谢!
【问题讨论】:
代码不是循环的,数据是 注意,在我曾经使用过的每个 nodejs mysql 库中,.query
是异步的,要么返回一个承诺,要么接受一个回调——你的代码看起来像你期望的 同步 结果
【参考方案1】:
同意 Dhananjai 的回答。我过去曾多次偶然发现这个问题。我创建了一个npm package 来解决这个问题并安全地对对象进行字符串化。
【讨论】:
【参考方案2】:循环 JSON 的意思是,对象内部有一个对象的引用,这使得 JSON.stringify 不可能。
在您的情况下, res.send(JSON.stringify(answer)) 可能是问题所在。 con.query(sql) 的响应可能不是一个简单的对象。
另外,该函数是异步的,需要回调来得到答案(我假设你使用的是 mysqljs https://github.com/mysqljs/mysql)
给出更多细节以进一步解释,但根本问题是变量“answer”的值
【讨论】:
很高兴它有帮助! :)以上是关于如何解决 NodeJS 中的“TypeError:将循环结构转换为 JSON”的主要内容,如果未能解决你的问题,请参考以下文章
Nodejs报内部错误 TypeError: Cannot read property ‘destroy‘ of undefined的解决方法
TypeError:Task.find 不是 Node Js 中的函数
如何解决 TypeError: request.write is not a function
NodeJS Mongoose record.save TypeError