fetch
함수를 사용하여 데이터를 비동기로 요청할 수 있다.
AJAX
(Asynchronous JavaSctipt And XML, 비동기적 자바스크립트와 XML)
비동기 HTTP 요청 기술을 나타내는 용어
JSONplaceholder
https://jsonplaceholder.typicode.com/
예제에서는 Fake REST API를 사용한다.
fetch
함수의 기본은 GET
으로 간단하게 사용할 수 있다.
- 첫번째
then
: 요청이 성공할 경우response
객체를 받아json
형태로 파싱- 두번째
then
:json
형태의 응답body
의 데이터를 출력catch
: 요청이 완료되지 못할 때 에러 처리
fetch('https://jsonplaceholder.typicode.com/users')
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.log('Fetch err', err));
await async
와 함께 사용async function getUsers() {
let res = await fetch('https://jsonplaceholder.typicode.com/users');
let data = await res.json();
console.log(data);
}
header
내용을 추출할 수 있다.for (let [key, value] of res.headers) {
console.log(`${key} = ${value}`);
}
POST
의 경우 fetch
함수의 두번째 인자에 method
와 body
정보를 넘겨야 한다.
headers
:json
을 전송하기 때문에Content-Type
을application/json
으로 설정한다.body
:JSON.stringify()
함수를 사용하여json
형태로 전달한다.
fetch('https://jsonplaceholder.typicode.com/users', {
method: 'POST',
headers: {
'Content-type': 'application/json; charset=UTF-8',
},
body: JSON.stringify({
name: 'foo',
username: 'bar',
}),
})
.then(res => res.json())
.then(data => console.log(data))
await async
와 함께 사용async function getUsers() {
let res = await fetch('https://jsonplaceholder.typicode.com/users', {
method: 'POST',
headers: {
'Content-type': 'application/json; charset=UTF-8',
},
body: JSON.stringify({
name: 'foo',
username: 'bar',
}),
});
let data = await res.json();
console.log(data);
}
fetch('https://jsonplaceholder.typicode.com/users', {
method: 'PUT,
headers: {
'Content-type': 'application/json; charset=UTF-8',
},
body: JSON.stringify({
name: 'foo',
username: 'bar',
}),
})
.then(res => res.json())
.then(data => console.log(data))
fetch
함수를 호출하면 브라우저는 요청을 보내고 promise
객체를 반환한다.promise
가 resolved되어 response
객체가 반환된다. response
객체는 ok
, status
프로퍼티를 이용하여 응답 성공 여부를 확인할 수 있다. http
요청이 완료되지 못한 상태라면 promise
가 rejected된다. 이 경우 catch
함수를 사용하여 에러를 처리한다.fetch
의 기본 문법url
: 접근하고자 하는 url
options
: 선택 매개변수, method
나 header
등을 지정fetch(url, [options])
.then(response => response.json())
.then(result => /* result 출력 */);
// ES5
fetch(url, [options])
.then(function(response) {
return response.json();
})
.then(function(result) {
return /* result 출력 */
});
await async
를 함께 사용할 경우에는async function getResult() {
let response = await fetch(url, [options]);
let result = await response.json();
/* result 출력 */
};
response
객체의 프로퍼티
-response.status
:http
상태 코드
-response.ok
: 응답 상태가200
~299
일 경우true
-response.headers
:http
헤더fetch
의 옵션
-method
:http
메서드
-headers
: 요청 헤드가 담긴 객체
-body
: 보내려는 데이터(요청 본문)
https://jsonplaceholder.typicode.com/
https://hogni.tistory.com/142
https://yeri-kim.github.io/posts/fetch/
https://ko.javascript.info/fetch