우당탕탕 개발일지/Computer_졸업프로젝트

[NODE.JS] RES의 오류 속으로

혜죠오미 2020. 9. 8. 14:43

백앤드로 nodejs를 사용해서 졸업 프로젝트를 수행중이다. 로그인 기능을 구현중이었는데, res에 관련된 오류를 정말 많이 봐서 이를 정리해 두려고 글을 적는다. 

 

일단, res객체 중에서 내가 사용한 객체와, 오류가 난 것을 정리해보았다.

 

1. res.send 

res.send는 응답을 전송해주는 것으로, 다양한 값들을 전송할 수 있다. 나는 프론트에 사용자 정보를 전달하려고 했지만, 프론트에서는 json 형태로 전송한 데이터를 받아야 하기 때문에 처음 이 res.send로 전송했을 때에는 전송이 잘 되지 않았다.

 

떴던 오류는 다음과 같다.

Converting circular structure to JSON --> starting at object with constructor 'Socket' | property 'parser' -> object with constructor 'HTTPParser' --- property 'socket' closes the circle

2. res.json

그래서 res.json형태로 상태값과 성공/실패여부, 데이터를 전송해주었다. 

res.json({
        status: 400,
        success: false,
        message: "로그아웃 실패",
      });
      return;

이렇게 데이터를 json의 형태로 다시 보내주었다. 이렇게 json으로 보내준 다음, 

res.redirect("/")

이 코드를 적어서 다시 /로 가려고 했으나, 오류가 이렇게 떴다.

ERR_HTTP_HEADERS_SENT : 클라이언트에 헤더를 보낸 후 헤더를 설정할 수 없습니다

이렇게 오류가 뜨는 것은 res를 두번 보내려고 했기 때문이다. 그래서 res.redirect("/") 대신 return;을 사용했다.

사실, 아직까지 나는 res.redirect("/")를 써서 완벽한 코드를 만들고 싶지만, 이렇게 하면 항상 오류가 떴었다. 

 

3. res.redirect

브라우저를 다시 리다이렉트하는 것이다. 이 코드를 사용하고 싶어서 stackoverflow에 검색해봤지만,

 

https://stackoverflow.com/questions/21439526/res-send-then-res-redirect

 

res.send(), then res.redirect()

Why is the following not working? res.send({ successMessage: 'Task saved successfully.' }); res.redirect('/'); I basically need the successMessage for AJAX requests. The redirect is necessary...

stackoverflow.com

이런 답변을 얻었다. 

 

결국, res.json 후 return을 사용한 결과, 

로그인에 성공했다.

 

로그인 성공!