💡 목표 : 로그인 창 구현
input
2개 (email, password)🌸 결과 : fetch 함수 사용
const ERRORS = {
USERS_DOES_NOT_EXIST: '잘못 입력',
INVALID_PASSWORD: '비밀번호 확인',
};
const goToMain = () => {
fetch('http://서버IP주소/users/signin', {
method: 'POST',
body: JSON.stringify({
email: inputValues.userName,
password: inputValues.password
}),
})
.then(response => response.json())
.then(result => {
if (result.access_token) {
alert('로그인 성공');
navigate('/main-namju');
return;
}
alert(ERRORS[result.message]);
});
};
백엔드에 request를 보내기 위하여 fetch 함수를 사용하였다 ➡️ fetch("API주소", { request 내용 })
함수를 인라인으로 바로 넣을 수 없어, goToMain()
이라는 함수로 분리하였다
request는 method와 body로 구성됨
method는 기본값이 GET
, body는 문자열만 가능하기 때문에 객체를 문자열로 바꿔주는 JSON.stringify
를 사용한다.
response를 받으면 먼저 JSON 형태로 바꿔준다 .json()
그리고 로그인이 성공해 토큰을 받는다면 '로그인 성공' 얼럿을 띄운 후 메인 페이지로 이동한다.
오류가 날 경우 맞는 메시지를 띄운다
오류를 else if 문으로 분기처리하는 것 보다는, 맵핑하여 간결하고 직관적으로 코드를 고쳤다.
✨ 나의 경우 email, password 값이 inputValues
라는 state 객체의 프로퍼티로 들어가있었다.
그냥 inputValues.userName
식으로 접근할 수 있었다.
⚠️ 항상 콘솔을 찍어보며 백엔드와의 통신이 제대로 이어졌는지, key error가 있는지, 오류 메시지는 무엇인지 확인하면서 작업하자