SyntaxError: Unexpected end of JSON input
트위터 클론코딩을 진행하다 만난 에러였다.
트위터 글을 삭제할 때마다 나타났다.
수정, 조회 시에는 나타나지 않아서 삭제 부분에 문제가 있다고 판단했다.
res.sendStatus(204);
삭제 API의 마지막 응답을 204 상태코드로 보낸게 문제가 됐다.
204 상태코드의 경우 HTTP Response body가 아예 존재하지 않는 경우에 사용해야 한다.
express에서 자동으로 204상태코드에 대해 리스폰스바디를 보여주지 않고 넘어간다고 한다.
나의 경우에는 프론트에서 fetch로 데이터를 받아왔을 때 body가 없을 경우
에러를 반환하는 코드가 있었어서 이 에러가 계속 뜨는거였다!
204 상태코드가 가지는 의미는 좀 더 상세히 보자면
204 No Content 클라이언트의 요청은 정상적이다.
하지만 컨텐츠를 제공하지 않는다.
200으로 응답하고 응답 body에 null, false 등으로 응답하는 것과 다르다.
204의 경우 HTTP Response body가 아예 존재하지 않는 경우에 사용한다.
삭제 요청으로 자원을 삭제하여 더 이상 존재하지 않고 그 자원을 참조하는 모든 자원도 삭제되어 더 이상 HTTP body를 응답하는 것이 무의미해졌을 때 사용한다고 한다!!
res.status(204).json({ message: `삭제가 완료되었습니다.` });
상태코드를 204로 하고 뒤에 데이터를 보냈을 때는 응답값이 아무 것도 뜨지 않았다.
그래서 상태코드 자체를 200 으로 수정했을 경우에는 데이터가 들어오는지 확인해봤다.
(아주 잘 들어온다!!)
res.status(200).json({ message: `삭제가 완료되었습니다.` });
상태코드를 200으로 수정하고 응답 데이터를 전송하여 오류가 발생하지 않게끔 수정했다.