: 프론트엔드와 백엔드는 데이터를 주고 받지 않을 때는 완전하지 않다. 따라서 데이터를 주고 받는 것에 대해 React에서 어떻게 처리할까?
- fetch 함수는 HTTP 통신을 할 때 사용되는 함수이다.
- 첫 번째 인자는 API 주소, 두 번째 인자는 HTTP 통신을 할 때 활용되는 내용이다.
//기본 형식
fetch('api 주소')
.then(res => res.json())
.then(res => {
// data를 응답 받은 후의 로직
});
// 아래는 더 구체적인 예시 !
//⬇️첫번째 인자 ⬇️ 두번째 인자(오브젝트)
fetch("api주소", {
method: "POST",
body: JSON.stringify({
email: this.state.id, // 변경 가능
password: this.state.pw, // 변경 가능
}),
})
.then((response) => response.json())
.then((result) => console.log("결과: ", result)); // console.log의 위치에 실행하고 싶은 함수를 적어두면 된다 :)
1. method
2. JSON.stringify()
: Object에서 String 형태로 변환해주는 메소드이다.
: http를 통해 데이터를 주고 받을 때는 string 형태로 바꿔야 한다.
3. .then()
통신은 다른 로직에 비해 오래 걸리기 때문에 비동기 처리돼서 then 메서드를 사용한다.
➡️ then((response) => response.json())
: 서버에서 보내준 response를 Object 형태로 변환한다.
: 첫 번째 then 함수에 전달된 인자 response는 http 통신 요청과 응답에서 응답의 정보를 담고 있는 객체이다. Response Object
라고 부른다
➡️ .then((result) => console.log("결과: ", result));
: console.log의 위치에 실행하고 싶은 함수를 적어두면 된다.
❗️ 백앤드에서 응답 body를 안 주는 경우도 많다. 출처: 예리님 블로그
설명: 유저를 저장한다.
base url: https://api.google.com
endpoint: /user
method: post
요청 body:
{
"name": string,
"batch": number
}
응답 body:
1. 제대로 저장했으면 status code를 200 전달. 응답 body는 없음
2. 권한 오류가 생기면 status code를 403으로 전달하고. 응답 body는 아래와 같음
{
success: false,
message: "권한이 없습니다"
}
fetch ⬇️
fetch('https://api.google.com/user', {
method: 'post',
body: JSON.stringify({
name: "yeri",
batch: 1
})
})
.then(res => {
if (res.status === 200) {
alert("저장 완료");
} else if (res.status === 403) {
return res.json();
}
})
.then(res => {
console.log("에러 메시지 ->", res.message);
})
✏️ 나의 코드
➡️ 회원가입 & 로그인 페이지를 모두 테스트 하기 위해 body에 여러 키🔑 값을 적어주었다.
➡️ body에 전달해줘야 하는 키 이름은 서버의 데이터베이스에 있는 이름과 동일해야 한다!
일치하지 않으면 오류가 발생했다는 status code가 출력될 수 있다.
🔑 원석님(백엔드)와 통신 시도
우아 성공이다 🙌🏻
통신 성공 후,
여러가지 오류를 시도해보았다...!
디테일하게 각 input 마다의 에러 메시지를 작성해주셔서, 메세지(Response)에 따라서 사용자에게 정보를 전달해줄 수 있다는 생각에 마구 설렜던 시간이었다.👍🏻
안녕하세요 제가 구현하고자 하는 게 포스팅하신 내용과 똑같은 것 같은데,,,
백엔드와의 통신 문제에서 계속해서 어려움을 겪고 있는 상황이라 혹시 도움을 요청해도 될까요...?
답장 주시면 정말 감사하겠습니다...