❗️Error/오류를 해결하자!

[Express] SyntaxError: Unexpected token " in JSON at position 0 at JSON.parse

hellohailie 2022. 6. 20. 23:45

 

SyntaxError: Unexpected token " in JSON at position 0 at JSON.parse 

 

에러의 원인

=> json 형태가 아닌 데이터를 json으로 파싱하려고하니까 뜨는 에러

 

 

 

에러 해결방법


express.json()을 하면 배열 또는 객체의 형태만 받아들인다. 

그런데 배열이나 객체가 아닌 다른 형태의 body를 가지고 오고 싶다면 (req.body) strict를 false 처리해야한다. 


👇Express 공식문서 참고

 

 

👇express.json()에서 strict를 false 처리하는 방법

const jsonParser = express.json({strict : false});

 

 


번외

SyntaxError: Unexpected token A in JSON at position 0

 

위에서 express.json()에서 strict를 false 처리를 했는데도 위와 같은 에러가 뜬다면??

 

res.send() 와 res.json()의 차이를 알고 res.json()을 써보자!!

 

👇

사실상 하는 기능은 동일하다.

 

res.send()

기본적으로 서버에서 response 처리를 할 때 Content-type를 지정해주어야 한다.

res.send는 우리가 어떤 데이터를 보내는지 파악을 해서 이에 알맞게 Content-type을 지정해준다. 이는 Buffer, String, Object, Array일 수 있다.

 

res.json()

res.json()은 안에 들어있는 데이터들을 자동으로 json 형식으로 바꾸어 보내준다.

 

 

만약, json type을 전달하는 것이 확실하다면 res.send보다는 res.json을 활용하는 것이 훨씬 좋은 선택이다.

 

이유 1. res.json 이라는 표기를 통해 응답의 data type이 json이라는 것을 보는 사람이 쉽게 예측할 수 있게 한다.

이유 2. res.send가 실행되는 순서는 사실상 res.send => res.json => res.send 라고 한다.

반면, res.json이 실행되는 순서는 res.json => res.send 라고 한다. 결국 res.json이 한단계 덜 거치게 되는 것이다.

 

 

 

참고

https://expressjs.com/ko/4x/api.html#express.json

https://haeguri.github.io/2018/12/30/compare-response-json-send-func/

https://expressjs.com/ko/4x/api.html#res.json

 

😃 잘못된 개념 전달이 있다면 댓글 부탁드립니다. 저의 성장에 큰 도움이 됩니다🤓