TypeError:在nodejs中将循环结构转换为JSON

Hit*_*sal 6 javascript json node.js

我正在使用nodejs的请求包

我在这里使用此代码

 var formData = ({first_name:firstname,last_name:lastname,user_name:username, email:email,password:password});

  request.post({url:'http://localhost:8081/register', JSON: formData}, function(err, connection, body) {
Run Code Online (Sandbox Code Playgroud)

exports.Register = function(req, res) {
    res.header("Access-Control-Allow-Origin", "*");
    console.log("Request data " +JSON.stringify(req));
Run Code Online (Sandbox Code Playgroud)

这里我得到这个错误TypeError:将循环结构转换为JSON

任何人都可以告诉我这是什么问题

谢谢

小智 46

我也遇到了这个问题。那是因为我忘记了等待一个承诺。


Sci*_*ter 22

JSON不接受循环对象 - 引用自身的对象.JSON.stringify()如果碰到其中一个,将会抛出错误.

request(req)对象本质上是循环的 - Node就是这样做的.

在这种情况下,因为您只需要将其记录到控制台,您可以使用控制台的本机字符串化并避免使用JSON:

console.log("Request data:");
console.log(req);
Run Code Online (Sandbox Code Playgroud)

  • @Rahulroy您应该能够从 req 对象访问您需要的属性 (3认同)

Aru*_*E S 15

我能够使用这种方法获取值,在Careerkarma.com

上找到 输出看起来像这样。 输出预览

我只是在调试器控制台中运行此代码。将您的对象传递给此函数。
也复制粘贴该功能。

 const replacerFunc = () => {
    const visited = new WeakSet();
    return (key, value) => {
      if (typeof value === "object" && value !== null) {
        if (visited.has(value)) {
          return;
        }
        visited.add(value);
      }
      return value;
    };
  };
  
  JSON.stringify(circObj, replacerFunc());
Run Code Online (Sandbox Code Playgroud)


Din*_*lli 9

尝试使用这个 npm 包。这帮助我从我的节点解码 res 结构,同时passport-azure-ad用于使用 Microsoft 帐户集成登录

https://www.npmjs.com/package/circular-json

您可以通过执行以下操作来字符串化您的循环结构:

const str = CircularJSON.stringify(obj);
Run Code Online (Sandbox Code Playgroud)

然后您可以使用 JSON 解析器将其转换为 JSON

JSON.parse(str)
Run Code Online (Sandbox Code Playgroud)

  • 正如他们的页面所说,我想我们从现在开始可以使用 https://github.com/WebReflection/flatted#flatted flatted (3认同)

Sau*_*pta 7

我忘记在异步函数中使用await关键字。与给定的系统

blogRouter.put('/:id', async (request, response) => {
  const updatedBlog = Blog.findByIdAndUpdate(
    request.params.id,
    request.body,
    { new: true }
  );
  response.status(201).json(updatedBlog);
});
Run Code Online (Sandbox Code Playgroud)

Blog.findByIdAndUpdate 应与await关键字一起使用。


小智 6

使用这个https://www.npmjs.com/package/json-stringify-safe

var stringify = require('json-stringify-safe');
var circularObj = {};
circularObj.circularRef = circularObj;
circularObj.list = [ circularObj, circularObj ];
console.log(stringify(circularObj, null, 2));


stringify(obj, serializer, indent, decycler)
Run Code Online (Sandbox Code Playgroud)