【问题标题】:How do I solve "TypeError: Converting circular structure to JSON" in NodeJS如何解决 NodeJS 中的“TypeError:将循环结构转换为 JSON”
【发布时间】: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 是异步的,要么返回一个承诺,要么接受一个回调——你的代码看起来像你期望的 同步 结果

标签: javascript mysql node.js json reactjs


【解决方案1】:

同意 Dhananjai 的回答。我过去曾多次偶然发现这个问题。我创建了一个npm package 来解决这个问题并安全地对对象进行字符串化。

【讨论】:

    【解决方案2】:

    循环 JSON 的意思是,对象内部有一个对象的引用,这使得 JSON.stringify 不可能。

    在您的情况下, res.send(JSON.stringify(answer)) 可能是问题所在。 con.query(sql) 的响应可能不是一个简单的对象。

    另外,该函数是异步的,需要回调来得到答案(我假设你使用的是 mysqljs https://github.com/mysqljs/mysql

    给出更多细节以进一步解释,但根本问题是变量“answer”的值

    【讨论】:

    • 很高兴它有帮助! :)
    猜你喜欢
    • 2021-10-21
    • 2022-01-11
    • 1970-01-01
    • 2015-01-21
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2018-10-05
    相关资源
    最近更新 更多