백앤드로 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을 사용한 결과,
로그인에 성공했다.
'우당탕탕 개발일지 > Computer_졸업프로젝트' 카테고리의 다른 글
[AWS 배포] dlib을 설치해보자 (0) | 2020.10.11 |
---|---|
[NODE.JS] POST/ --ms -- 오류 해결기 (0) | 2020.10.11 |
[AWS 배포] FFMPEG 설치의 길을 향해 (0) | 2020.10.11 |
[AWS 배포] 우분투에는 디스플레이가 없다! (0) | 2020.10.11 |
[NODE.JS] 서버 개발기1_로그인/회원가입 (0) | 2020.09.02 |