잘 끝난줄 알았던 회원가입 아이디 중복확인 기능이 불능이 되었다.
ReferenceError: Can't find variable: check
콘솔창에 중복여부를 판단하는 check
변수를 찾을 수 없다고 나온다. 분명히 아까까지 잘만 되던 기능이 왜 갑자기 불능이 됐을까.
먼저 중복확인 기능을 간단하게 살펴보면
function(
id = $('#loginId').val()
$.ajax({
type: "GET",
url: "/api/double",
data: {},
success: function (response) {
let user = response["user"];
for (let i = 0; i < user.length; i++) {
let dbId = user[i]['id']
if (dbId === id) {
check = 1;
break;
} else {
check = 0
}
}
if(check === 1) {
alert('이미 사용중인 아이디입니다.')
} else {
alert('사용 가능한 아이디입니다.')
//성공 여부를 알려주는 코드
}
DB에서 불러온 아이디 중 사용자가 입력한 아이디가 일치하는 부분이 있다면 이미 사용중인 아이디라는 알림을 보내고 없다면 성공시키는 로직이다.
꼼꼼히 코드를 살펴보던중 아까 전 DB의 내용들을 삭제한 기억이 떠올랐다. 바로 DB에서 불러온 내용이 비어있기 때문에 발생한 오류였다.
response = {user: []}
위 코드에서 response
를 콘솔에 출력한 내용이다. 배열 user
안에 있는 내용 중 id
값을 사용자의 입력값이랑 비교해야 하는데 user
안에는 id
가 없으니 아무일 없이 반복문을 빠져나와 버리고 check
변수는 선언조차 되지 않았다. 따라서 변수가 없다는 오류를 냈던 것이다.
문제를 찾았으니 해결방법은 아주 간단하다.
if (user.length === 0) {
alert('사용가능한 아이디입니다.');
//성공 여부를 갈려주는 코드
} else {
for (let i = 0; i < user.length; i++) {
let dbId = user[i]['id']
if (dbId === id) {
check = 1;
break;
} else {
check = 0
}
}
if (check === 1) {
alert("이미 사용중인 아이디입니다.");
} else {
alert("사용 가능한 아이디입니다.")
//성공 여부를 알려주는 코드
}
}
if
문을 추가해 배열user
가 비어있다면 중복체크를 성공시키고 아니라면 원래의 로직을 실행하면 된다.
처음 로직을 검사했을때는 DB에 내용들이 저장되어 있었기 때문에 이런 오류가 나리라고 전혀 예상하지 못했다. 앞으로는 좀더 꼼꼼히 코드를 살펴보고 검사도 더 확실하게 해야겠다.