일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 자바스크립트 문제풀이
- JS
- lodash
- JavaScript
- NPM
- Next
- 자바스크립트
- Baekjoon
- 자바스크립트코딩테스트
- til
- 자바스크립트 문제
- 알고리즘문제풀이
- 타입스크립트
- react
- 리액트
- CSS
- leetcode문제풀이
- 자바스크립트 알고리즘 문제
- next13
- stack문제
- 리액트쿼리
- 자바스크립트 알고리즘
- 프론트엔드
- leetcode
- Next.js13
- 자바스크립트 문제 풀이
- 자바스크립트 연결리스트
- HTML
- 프로그래머스
- 제로베이스
- Today
- Total
코드노트
AJAX??? 이해하기, Fetch API 본문
AJAX (Asynchronous JavaScript And XML)
음...
서버와 비동기적으로 데이터를 주고받는 자바스크립트 기술?
서버와 통신하기 위해 XML객체를 사용하는 것!
자바스크립트를 사용하여 브라우저가 서버에게 비동기 방식으로 데이터를 요청
-> 서버가 응답한 데이터를 수신하여 웹페이지를 동적으로 갱신하는 프로그래밍 방식
* XML (XMLHttpRequest)
- 서버와 상호작용을 할 때 사용
- 페이지의 새로고침 없이도 URL에서 데이터를 가져올 수 있다.
HTTP요청 메서드는 클라이언트가 서버에 요청의 종류와 목적을 알리는 방법
5가지 요청 메서드 CRUD ( Create(생성), Read(읽기), Update(갱신), Delete(삭제) )
HTTP 요청 메서드 | 종류 | 목적 | 페이로드 |
GET | index/retrieve | 모든 / 특정 리소스 취득 | X |
POST | create | 리소스 생성 | O |
PUT | replace | 리소스의 전체 교체 | O |
PATCH | modify | 리소스의 일부 수정 | O |
DELETE | delete | 모든 / 특정 리소스 삭제 | X |
- GET : 데이터를 URL의 일부분인 쿼리 문자열로 서버에 전송
- POST : 데이터 ( 페이로드 )를 요청 몸체에 담아 전송
* 페이로드 : 전송되는 데이터
서버로 데이터를 요청하는 경우에서 알아보려고 한다.
예전에 사용하던 onreadystatechange프로퍼티는 그냥 넘어가자..
Fetch
GET
// URL요청
fetch('url')
// Fetch 응답 객체를 받아온다.
.then((response) => {
return response.json()
})
// 응답 객체가 JSON -> 순수 JS 객체로 변환
.then((json) => {
console.log(json)
})
.catch((에러) => {
console.log(에러)
})
- fetch() 함수는 기본값으로 GET방식으로 작동
- 옵션은 따로 달지 않아도 된다.
- {status: 200} 확인
- json형태의 데이터를 응답하기 때문에 response 객체는 json()메서드를 사용
단순 특정 API에 저장된 데이터를 보여주는 경우에는 GET방식의 HTTP 통신으로 가능하다.
POST
fetch("url", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Test",
body: "Test",
id: 1,
}),
}).then((response) => console.log(response));
- API에서 데이터를 생성해야한다면 POST방식을 사용
- method : "POST"로 지정
- headers 옵션에서는 json포멧을 사용하는걸 지정
- body 에는 JSON.stringify를 통해서 정보를 작성
- {status:201} 확인
PUT, DELETE
fetch("url", {
method: "PUT",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Test",
body: "test",
id: 1,
}),
})
.then((response) => response.json())
.then((data) => console.log(data));
- 데이터의 수정 및 삭제를 위해서는 PUT과 DELETE방식의 HTTP 호출을 해야한다.
- method 방식을 PUT으로 지정하는거 외에는 POST방식과 비슷하다.
fetch("url", {
method: "DELETE",
})
.then((response) => response.json())
.then((data) => console.log(data));
- method 방식을 DELETE로 지정
- 보낼 데이터가 따로 필요 없기 때문에 headers, body 옵션은 없어도 된다.
Tip
async function post(url, path, body, headers = {}) {
const url = `https://${url}/${path}`;
const options = {
method: "POST",
headers: {
"Content-Type": "application/json",
...headers,
},
body: JSON.stringify(body),
};
const res = await fetch(url, options);
const data = await res.json();
if (res.ok) {
return data;
} else {
throw Error(data);
}
}
post("jsonplaceholder.typicode.com", "posts", {
title: "Test",
body: "test",
id: 1,
})
.then((data) => console.log(data))
.catch((error) => console.log(error));
- 같은 내용들을 반복할 수 있기 때문에 별도의 함수나 모듈로 사용할 수 있다.
- async/await키워드를 이용해서 HTTP 방식들을 비동기 함수로 작성하여 사용 가능!
- fetch API는 브라우저에서만 가능하다.
- node js에서 node-fetch, unfetch 라이브러리를 통해서 사용 가능
async는 프라미스에 대하여 포스팅하면서 자세하게 정리하려고 한다.
간단하게만 알아보자!
async
async function getData() {
let response = await fetch("url")
if (!response.ok) {
throw new Error("에러")
}
let res = await response.json();
console.log(res)
}
getData().catch(() => {
console.log("에러")
})
- function앞에 async 를 붙이게 되면 해당 함수는 프라미스를 반환한다.
- 프라미스가 아닌 값을 반환하더라도, 이행 상태의 프라미스로 값을 감싸 이행된 프라미스가 반환되도록 한다.
- await 키워드를 만나게 되면 프라미스가 처리될때까지 기다린다. 결과는 그 이후에 반환
- then으로 결과값을 받을 수 있지만 await를 통해서 가독성이 좋은 장점도 있다.
그외에도
jquery...
리엑트, 뷰?에서는 axios라이브러리가 있다. 다음 포스팅에서 자세하게 정리하도록 해봐야겠다.!
axios.get("url").then((result) => {
console.log(result.data)
}).catch(() => {
console.log("에러")
})
그리고 비동기를 사용하다가 자주 만나게 되는 CORS 에러가 나는 이유는?
네이버에서 카카오로 요청하게 된다면? 당연히 거절하게 된다. 거절..하게 되면 뜨는거다!
let cors = require('cors')
app.use(cors())
- 이렇게 해결해보자!
- 모든 도메인에서 제한없이 해당 서버에 요청을 보내고 응답을 받을 수 있다.
'Code note > 자바스크립트' 카테고리의 다른 글
자바스크립트로 라우터 구현하기 / navigo (0) | 2023.02.01 |
---|---|
fetch 요청 여러개 한번에 가져오기. Promise.all() (0) | 2023.01.19 |
Intersection Observer API 사용방법 (0) | 2023.01.09 |
자바스크립트 클래스 super 키워드 이해하기 (0) | 2023.01.03 |
스크롤 상단 고정 네비게이션 (0) | 2022.12.31 |