source

TypeError: nodejs에서 순환 구조를 JSON으로 변환하는 중

factcode 2023. 2. 17. 21:40
반응형

TypeError: nodejs에서 순환 구조를 JSON으로 변환하는 중

node.js 요청 패키지를 사용하고 있습니다.

코드:

 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으로 변환하는 중

누가 뭐가 문제인지 말해줄래?

JSON은 원형 객체(자신을 참조하는 객체)를 허용하지 않습니다. JSON.stringify()이 중 하나를 발견하면 에러가 발생합니다.

청( 。req 이치노노드는 그렇게 합니다.

이 경우 콘솔에 기록만 하면 되므로 콘솔의 네이티브 문자열화를 사용하여 JSON을 사용하지 않도록 할 수 있습니다.

console.log("Request data:");
console.log(req);

저도 이 문제에 부딪혔어요.약속을 기다리는 것을 잊어버렸기 때문이다.

npm, npm, npm, npm, npm, npm.에 의해, 「」를 하고, 로부터 res 구조를 할 수 있게 .passport-azure-ad 어카운트를하기 위한

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

다음 작업을 수행하여 원형 구조를 문자열화할 수 있습니다.

const str = CircularJSON.stringify(obj);

그런 다음 JSON 파서를 사용하여 JSON으로 변환할 수 있습니다.

JSON.parse(str)

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());

비동기 함수에서 wait 키워드를 사용하는 것을 잊었습니다.주어진 수축과 함께

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

blog.findByIdAndUpdate는 wait 키워드와 함께 사용해야 합니다.

이 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)

비동기 응답이 없기 때문입니다.예를 들어 다음과 같습니다.

app.get(`${api}/users`, async (req, res) => {
    const users = await User.find()
    res.send(users);
   })

는 순환 참조를 포함하는 JavaScript 구조를 "일반" JSON.stringify로 직렬화할 없기 때문입니다.

@Dinesh가 언급한 https://www.npmjs.com/package/circular-json이 좋은 솔루션입니다.그러나 이 npm 패키지는 더 이상 사용되지 않습니다.

따라서 CircularJ의 작성자가 직접 https://www.npmjs.com/package/flatted npm 패키지를 사용하십시오.아들.

간단한 사용법당신의 경우, 다음과 같이 코드하세요.

Import 패키지

// ESM
import {parse, stringify} from 'flatted';

// CJS
const {parse, stringify} = require('flatted');

그리고.

console.log("Request data " + stringify(req));

는, Just use 「Just use 」( 「Just use」)를 합니다.await

await res.json({data: req.data});

사용을 때 발생하였습니다.await, 「」의async약속해 주세요. 해서 가 풀었어요.await키워드를 지정합니다.

오류가 발생하고 , 저 '아까운'을 사용하지 입니다.저 같은 경우는 단지 사용하지 않았기 때문입니다.await와 함께Users.findById()약속을 돌려주니까response.status().send()/response.send()약속이 정해지기 에 전화를 받고 있었다(거절 또는 거부)

코드 조각

app.get(`${ROUTES.USERS}/:id`, async (request, response) => {
    const _id = request.params.id;
    try {
        // was getting error when not used await
        const user = await User.findById(_id);
        if (!user) {
            response.status(HTTP_STATUS_CODES.NOT_FOUND).send('no user found');
        } else {
            response.send(user);
        }
    } catch (e) {
        response
            .status(HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR)
            .send('Something went wrong, try again after some time.');
    }
});

비동기 함수(api 콜)에서 비동기/대기 기능을 사용하지 않을 때 이 문제가 발생했습니다.따라서 이들을 추가하거나 약속 핸들러를 사용하여 오류를 올바르게 해결합니다.

mongodb의 경우

따라서 MongoDB에서 데이터를 가져오는 동안 오류가 발생하면 문제는 비동기입니다.

이전에. 여기에 이미지 설명 입력

app.get('/users',(req,res,next)=>{
 
 const user=chatUser.find({});
 
 if(!user){
 
 res.status(404).send({message:"there are no users"});
 
 
 }
 
 if(user){
 
 res.json(user);
 
 }
})

끝나고

app.get('/users',async(req,res,next)=>{
 
 const user=await chatUser.find({});
 
 if(!user){
 
 res.status(404).send({message:"there are no users"});
 
 
 }
 
 if(user){
 
 res.json(user);
 
 }
 
})

저도 같은 문제가 있었습니다.-
const SampleFunction = 비동기(resp,action) => {
시도하다
if(resp)?길이 > 0) {
let tempPolicy = JSON.parse(JSON.stringify(resp[0]);
어떻게 좀 해봐.
}
}오류(오류){
console.error("consoleLogs") 입니다.유틸리티XXX.YY", 오류);
슬로우 에러
}
.
.
JSON.parse(JSON.stringify(resp[0]) 앞에 대기합니다.
내 경우 오브젝트가 읽기 전용이었기 때문에 이것은 필요했습니다.
Object.create(resp[0])와 {...resp[0]} 둘 다 내 요구를 충족시키지 못했습니다.

여기에 이미지 설명 입력

오브젝트에 위의 이미지와 같이 다른 유형의 속성이 있는 경우 JSON.stringify()는 오류를 발생시킵니다.

이것도 먹어봐

console.log(JSON.parse(JSON.stringify(req.body)));

TypeError: Converting circular structure to JSON in nodejs:이 오류는 데이터베이스에 스토리지가 없기 때문에 Node.js와 함께 사용할 때 Arangodb에서 발생할 수 있습니다.아카이브가 데이터베이스에 작성되어 있는 경우는, Aurangobi Web 인터페이스를 체크 인 합니다.

언급URL : https://stackoverflow.com/questions/27101240/typeerror-converting-circular-structure-to-json-in-nodejs

반응형