인스타그램 클론 코딩한것에 백엔드와 fetch 함수를 이용하여 통신해 보았다!!
이렇게 Flow로 정리해보니 많은 기능을 구현한것 같다!!
기존에 클론 코딩을 로그인 페이지에서만 진행했기 때문에 로그인 페이지에서 회원가입과 로그인 둘다 진행
goToSignUp = (event) => {
event.preventDefault();
const { idValue, pwValue } = this.state;
const btnCondition = idValue.includes("@") && pwValue.length > 6;
if (btnCondition) {
fetch("http://192.168.43.198:8000/user/signup", {
method: "POST",
body: JSON.stringify({
email: idValue,
password: pwValue,
name: 'bear',
phone_number:"010-1111-1111"
}),
})
.then((response) => response.json())
.then((result) => {
console.log(result);
if (result.message === "SUCCESS") {
alert("회원가입 완료. 로그인 부탁 드립니다.");
} else {
alert("회원가입이나 비밀번호 확인이 필요합니다.");
}
});
}
};
localStorage
에 백엔드로부터 전달받은 token을 저장하고 Main 페이지로 들어갑니다. goToMain = () => {
const { idValue, pwValue } = this.state;
const btnCondition = idValue.includes("@") && pwValue.length > 6;
if (btnCondition) {
fetch("http://192.168.43.198:8000/user/signin", {
method: "POST",
body: JSON.stringify({
login_id: idValue,
password: pwValue,
}),
})
.then((response) => response.json())
.then((result) => {
console.log(result);
if (result.message === "SUCCESS") {
alert("로그인 성공!");
localStorage.setItem("token", result.token);
this.props.history.push("/main-jiyeon");
} else {
alert("회원가입이나 비밀번호 확인이 필요합니다.");
}
});
}
}
body
에 image_url과 게시물 내용을 담고, header
에는 로그인할때 받았던 token
을 담아서 백엔드로 보냅니다.header
에 전달한 token을 통해 백엔드에서 user정보를 확인하고 유효한 유저인지 확인합니다.GET
method를 통해 서버에 저장된 유저이름, image_url과 게시물 내용이 담긴 list를 받고 map 함수를 통해 게시물을 보여줍니다. posting = (event) => {
event.preventDefault();
let token = localStorage.getItem('token');
fetch("http://192.168.43.198:8000/posting", {
method: 'POST',
headers: {
Authorization: token
},
body: JSON.stringify({
image_url: "image-url",
description: "안녕하세요 flap Bear 입니다.",
}),
})
.then((response) => response.json())
.then((result) => {
console.log(result);
if (result.message === "SUCCESS") {
fetch("http://192.168.43.198:8000/posting", {
method: 'get',
headers: {
Authorization: token
},
})
.then((res) => res.json())
.then((data) => {
console.log(data);
this.setState({
feedData: data.result
})
alert("GET 성공")
});
} else {
alert("GET 실패")
}
});
}
body
에 넣어서 같이 보내주었다.게시물의 id값을 url끝에 넣어줄때 이상하게 id값이 변수로 들어가지않아서 하드코딩하였다...
handleCommentAdd = (event) => {
event.preventDefault();
const { commentInput, commentData } = this.state;
if (commentInput.length) {
let token = localStorage.getItem('token');
fetch("http://192.168.43.198:8000/posting/comment", {
method: 'POST',
headers: {
Authorization: token
},
body: JSON.stringify({
posting_id: this.props.id,
comment:commentInput
}),
})
.then((response) => response.json())
.then((result) => {
console.log(result);
if (result.message === "SUCCESS") {
fetch("http://192.168.43.198:8000/posting/comment/53")
.then((res) => res.json())
.then((data) => {
console.log(data);
this.setState({
commentData: data.result,
commentInput: ''
})
});
} else {
alert("GET 실패")
}
});
}
};
댓글 추가와 마찬가지로 url에 들어가는 id값은 하드코딩하였다....
handleCommentDelete = () => {
const { commentInput, commentData } = this.state;
let token = localStorage.getItem('token');
fetch("http://192.168.43.198:8000/posting/comment/53/64", {
method: 'DELETE',
headers: {
Authorization: token
}
})
.then((response) => response.json())
.then((result) => {
console.log(result);
if (result.result === "SUCCESS") {
fetch("http://192.168.43.198:8000/posting/comment/53")
.then((res) => res.json())
.then((data) => {
console.log(data);
this.setState({
commentData: data.result,
})
});
} else {
alert("GET 실패")
}
});
};
그리고 제일가는건 실시간으로 서로 코드를 고치면서 커뮤니케이션힌 이 작업이 프로젝트에는 의미가 없을지여라도 굉장히 신기하고 좋은 작업이었던거 같다!!!ㅎㅎㅎㅎ
지연님 ㅠㅠㅠㅠ 정말 수고 많았어요 이때!!!! 덕분에 좋은 공부가 됐습니닿ㅎㅎ 이걸로 프론트와 통신하는 느낌 알수있었어요! 화이팅화이팅!
백엔드 분이 열심히 삭제해주셔서
ㅋㅋㅋㅋㅋㅋㅋ