fetch()와 json()에 대해 알아본다.
Fetch API는 HTTP 파이프라인을 구성하는 요청과 응답 등의 요소를 자바스크립트에서 접근하고 조작할 수 있는 인터페이스를 제공한다.
fetch()를 통해 네트워크의 리소스를 쉽게 비동기적으로 가져올 수 있다.
Fetch API의 Response 인터페이스는 요청에 대한 응답을 나타낸다.
Response() 생성자를 사용해 새 Response 객체를 생성할 수 있지만, 다른 API작업(예: 서비스 작업자 FetchEvent.respondWith 혹은 간단한 fetch())의 결과로 반환되는 Response 객체를 사용할 가능성이 높다.
Fetch API의 Request 인터페이스는 리소스 요청을 나타낸다.
Request() 생성자를 사용하여 새 Request 객체를 생성할 수 있지만, 서비스 작업자 FetchEvent.request와 같은 다른 API 작업의 결과로 반환되는 Request 객체를 사용할 가능성이 높다.
fetch()는 네트워크에서 리소스를 가져오는 프로세스를 시작하고 응답을 사용할 수 있게 되면 이행되는 promise를 반환한다. promise는 요청에 대한 응답을 나타내는 Response 객체로 확인된다.
const url = //가져오려는 네트워크 요청
fetch(url)
.then(response=>response.json())
.then(data=>console.log(data))
fetch()의 대표적인 2 가지 매개변수
1. resource
method : GET(기본값), POST, PUT, DELETE
headers : Headers 객체 또는 String값이 있는 객체 리터럴에 포함된 요청에 포함하려는 모든 헤더 (일부 이름은 금지되어 있음)
body : 요청에 추가하려는 본문
mode : 요청에 사용할 모드(예: cors, no-cors 또는 same-origin)
fetch(resource)
fetch(resource, options)
json()은 이름만 봐서는 JSON객체로 변환해 줄것 같지만 그렇지 않다.
Response 인터페이스의 json() 메서드는 Response 스트림을 가져와서 끝까지 읽는다. 본문 텍스트를 JSON으로 구문 분석한 결과로 해결되는 약속을 반환한다.
이름이 json()임에도 불구하고 분석 결과는 JSON(데이터 교환을 위한 데이터 포멧[표준 자료 구조])이 아니라 JSON을 입력으로 사용하고 이를 구문 분석하여 생성한 JavaScript 객체다.
const url = // 가져오려는 네트워크 요청
fetch(url) // 요청에 대한 응답을 나타내는 Response객체를 결과값으로 하는 Promise 객체를 반환
.then(response=>response.json()) // Reponse객체를 JSON으로 분석한 Js객체를 결과값으로 하는 Promise객체를 반환
.then(data=>console.log(data)) // {...(데이터)}
.then(data=>console.log(JSON.parse(data))) // Unexpected token o in JSON at position 1 || data가 JSON이 아니라 javascript 객체이기 떄문에 오류가 발생한다.
참고 사이트
MDN-Fetch API
MDN-Request
MDN-Response
MDN-Response.json()
MDN-fetch()