我正在使用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) {
和
exports.Register = function(req, res) {
res.header("Access-Control-Allow-Origin", "*");
console.log("Request data " +JSON.stringify(req));
这里我得到了这个错误TypeError:将循环结构转换为JSON
有谁能告诉我这是什么问题
由于
答案 0 :(得分:18)
JSON不接受圆形对象 - 引用自身的对象。如果遇到其中一个,JSON.stringify()
会抛出错误。
请求(req
)对象本质上是循环的 - Node会这样做。
在这种情况下,因为您只需将其记录到控制台,就可以使用控制台的本地字符串化并避免使用JSON:
console.log("Request data:");
console.log(req);
答案 1 :(得分:3)
尝试使用此npm软件包。这有助于我在使用passport-azure-ad
通过Microsoft帐户集成登录信息的同时,从节点解码res结构。
https://www.npmjs.com/package/circular-json
您可以执行以下操作来对圆形结构进行分类:
const str = CircularJSON.stringify(obj);
然后您可以使用JSON解析器将其转换为JSON
JSON.parse(str)
答案 2 :(得分:1)
使用此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)
答案 3 :(得分:1)
如果您要发送回复,请在回复前使用 await
await res.json({data: req.data};
答案 4 :(得分:1)
我忘记在异步函数中使用 await 关键字。 使用给定的系统税
blogRouter.put('/:id', async (request, response) => {
const updatedBlog = Blog.findByIdAndUpdate(
request.params.id,
request.body,
{ new: true }
);
response.status(201).json(updatedBlog);
});
Blog.findByIdAndUpdate 应与 await 关键字一起使用。
答案 5 :(得分:0)
TypeError: Converting circular structure to JSON in nodejs:
与Node.js一起使用时,可以在Arangodb上看到此错误,因为数据库中缺少存储。如果归档文件是在数据库下创建的,请在Aurangobi Web界面中签入。
答案 6 :(得分:0)
当不对异步函数(API调用)使用异步/等待时,遇到了这个问题。因此,添加它们/使用promise处理程序可以正确清除错误。
答案 7 :(得分:0)
使用JSON.stringify()解决了该问题。
如果要解析数据。您可以使用JSON.parse(JSON.stringify(res.data))
示例:
async uploadimage(ctx) {
const response = await axios.post("<URL>",<BODY_DATA>);
ctx.body = {
status: "success",
data: {
image: JSON.parse(JSON.stringify(response.data)),
},
}
}
答案 8 :(得分:0)
当我错过在返回Promise的调用之前在await
方法中使用async
关键字时,在Node Api调用中遇到了这个问题。我通过添加await
关键字解决了这个问题。
答案 9 :(得分:0)
这是因为您没有异步响应例如:
app.get(`${api}/users`, async (req, res) => {
const users = await User.find()
res.send(users);
})
答案 10 :(得分:0)
这是因为包含循环引用的 JavaScript 结构无法使用“纯”JSON.stringify 进行序列化。
@Dinesh 提到的https://www.npmjs.com/package/circular-json 是一个很好的解决方案。但是这个 npm 包已经被弃用了。
所以直接使用 CircularJSON 的创建者提供的 https://www.npmjs.com/package/flatted npm 包。
简单的用法。在你的情况下,代码如下
导入包
// ESM
import {parse, stringify} from 'flatted';
// CJS
const {parse, stringify} = require('flatted');
和
console.log("Request data " + stringify(req));
答案 11 :(得分:-3)
也试试这个
console.log(JSON.parse(JSON.stringify(req.body)));