useEffect(() => {
fetch(`${LOGIN_URL}/users/signin/kakao`, {
method: 'POST',
body: JSON.stringify({
code,
}),
})
.then(res => res.json())
.then(data => {
localStorage.setItem('token', data.token);
data.token ? navigate('/main') : alert('로그인에 실패하였습니다');
});
}, []);
기존에 백엔드와 데이터를 주고 받기위한 fetch함수를 활용한 코드이다.
이번 프로젝트 때 라이브러리를 자유롭게 사용이 가능하다 해서 Axios를 사용해서 바꿔보기로 결정했다.
useEffect(() => {
axios({
url: `${LOGIN_URL}/users/signin/kakao`,
method: 'post',
data: {
code,
},
timeout: 3000,
})
.then(data => {
localStorage.setItem('token', data.data.token);
data.data.token ? navigate('/main') : alert('로그인에 실패하였습니다.');
})
.catch(err => {
console.error(err);
});
};
Axios 라이브러리를 install하고 fetch대신 axios를 사용해봤는데 이런 형식으로 작성한다고 한다.
처음에 fetch함수를 사용했을 때 중간에 .then(res => res.json())으로 돌아오는 response에 대해 JSON으로 바꾸는 단계를 거쳐서 마지막에 .then(data => {localStorage.setItem('token', data.token)})으로 바로 JSON에 접근해서 'token'값을 담을 수 있었다.
하지만 Axios로 바꿔서 동일하게 .then을 사용해보니까 오류를 뱉는 것이였고 .then(res => res.json())에서 에러가 발생했다.
주변 동기들에게 질문하고 공식문서를 찾아보니 Axios의 특성상 JSON으로 바꾸지말고 데이터에 접근을 하나씩 해줘야 한다는 점을 새로이 알게 되었다.
그래서 console.log로 응답이 어떻게 오는지 살펴보고 data라는 key에 token이 담겨져 오는걸 확인하고 코드를 수정하니 정상적으로 token값이 로컬스토리지에 저장이 되는것을 확인했다. (그 이전엔 undefined로 계속 저장이 되어 오류를 뱉었음)
axios({
url: `${LOGIN_URL}/users/signin/kakao`,
method: 'post',
data: {
code,
},
timeout: 3000,
})
.then(response => {
localStorage.setItem('token', response.data.token);
data.data.token ? navigate('/main') : alert('로그인에 실패하였습니다.');
});axios.post(`${LOGIN_URL}/users/signin/kakao`, { code }).then(res => {
localStorage.setItem('token', res.data.token);
res.data.token ? navigate('/main') : alert('로그인에 실패하였습니다.');
});