
Converting circular structure to JSON
객체 내에 순환참조가 있을 때 발생한다. 순환참조는 객체가 자기 자신을 참조하는 구조를 의미한다. 예를 들어, 객체 A가 객체 B를 참조하고, 객체 B가 다시 객체 A를 참조하는 경우이다. 이러한 구조를 JSON으로 변환하려고 하면 이 오류가 발생한다. 본인은 어디에서 순환참조가 발생하는지 몰라서 다음과 같이 해결하였다.
return res.json({ accesstoken }) => 오류
return res.send({ accesstoken }) => 오류
res.json({ accesstoken }) => 정상
res.send({ accesstoken }) => 정상
return { accesstoken } => 정상
두 번째 코드에서 오류가 나서 다섯 번째 코드로 수정하였다.
return res.json({ accesstoken })

return res.send({ accesstoken })

res.json({ accesstoken })

res.send({ accesstoken })

return { accesstoken }

Res.json / Res.send / Res.end
일반적으로 res.json(), res.send(), res.end()가 호출되면 응답이 완료된 것으로 간주된다.
일반적으로 res.json, res.send, res.end 중 하나 이후에는 다른 응답 메서드를 호출하지 않는다.
즉, 한 번 쓰면 그걸로 응답은 끝이라는 말이다.
res.json()
• json형식 데이터를 클라이언트에 전송
• JavaScript 개체 또는 배열을 JSON 문자열로 자동 변환함.
• Content-Type 헤더를 application/json으로 설정해야함.
• 함수 호출 순서 : res.json(object) → res.json(object) → res.send(string)
res.send()
• 다양한 유형(문자열, 버퍼, 객체, 배열)의 데이터를 전송
• 문자열, 버퍼, JSON 개체 또는 배열을 보낼 수 있음. (json은 어차피 res.json을 씀)
• 전송된 데이터 유형에 따라 'Content-Type' 헤더를 설정함.
(예: 문자열의 경우 text/plain, 객체/배열의 경우 application/json).
• res.json()보다 더 다양하지만 객체나 배열이 제공되면 res.json()과 유사하게 동작함.
• 함수 호출 순서 : res.json(object) → res.send(string)
res.end()
• 본문 데이터를 보내지 않고 response를 끝내고 싶은 경우
• 안 써도 됨.
참고 링크 https://haeguri.github.io/2018/12/30/compare-response-json-send-func/ 시간이 없어서 res.json과 res.send를 직접 출력해보지는 않았고, 이 블로그를 참고해서 씀.
