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
'source' 카테고리의 다른 글
봄철 우선 프라이머리 콩과 비프라이머리 콩 (0) | 2023.02.17 |
---|---|
@Spring Boot Application 주석을 사용한 구성 (0) | 2023.02.17 |
$_FILE은 체크아웃 시 비어 있습니다. (0) | 2023.02.17 |
Restful API의 경우 GET method에서 json 데이터를 사용할 수 있습니까? (0) | 2023.02.17 |
Kafka는 "그룹 구성원이 실제로 소비자 그룹에 가입하기 전에 유효한 멤버 ID를 가지고 있어야 합니다." (0) | 2023.02.17 |