JavaScript/JavaScript
[Javascript] fetch 응답 null 체크하기
크리스피코드
2023. 3. 25. 14:12
0. fetch의 response
fetch()를 사용해 서버와 통신에 성공하면 그에 맞는 응답을 받게 된다. 다만 내가 처리하고자하는 데이터에서는 데이터가 없는 경우 null이 반환되는데 이 때문에 'SyntaxError: Unexpected end of JSON input' 에러가 발생하였다.
fetch('/test')
.then(res => {
if(!res.ok) throw new Error();
return res.json();
})
.then(jsonData => {
console.log(jsonData);
})
.catch(() => {
alert('에러가 발생했습니다.');
})
만약 응답으로 들어오는 데이터가 null일 경우 text()를 사용해 문자열로 변환할 경우 빈 문자열이 반환된다. 빈 문자열은 JSON 형태에 맞지 않기 때문에 json() 함수를 사용하면 에러가 발생하는 것이다.'
1. async와 await
응답 데이터를 문자열로 변환한 후 데이터 여부를 확인하고 처리해야하지만 이 응답 데이터는 Promise 타입으로 비동기로서 처리해아한다.
이를 동기 방식으로 처리하기 위해 async와 await 키워드를 사용할 수 있다.
fetch('/test')
.then(async res => {
let text = await res.text();
if(text == '') return null;
else return JSON.parse(text);
})
.then(data => {
console.log(data);
})
이때 응답 데이터인 res는 text() 함수로 이미 읽어내었으므로 이후 다시 json()을 사용하는 것은 불가능하다. 문자열로 변환된 데이터를 JSON 객체로 변환하기 위해 JSON.parse() 를 사용해야한다.