작성
·
1.3K
0
안녕하세요 강사님!
강의 너무 잘 들었습니당ㅎㅎ
우여곡절이 많아서 질문을 올릴까 말까 고민한 적도 많았지만 숱한 구글링 끝에 스스로 오류를 다 잡고 끝내서 더 뿌듯한 것 같아요.
역시 개발을 하고자 했으면 구글링은 필수!!
하지만 강의 내에서 다루지 않았던 회원 가입시 중복 아이디 검사에서는 무너져내렸습니다.
제가 이 기능을 구현하고자 생각했던 것은
회원가입시 입력한 아이디가 DB내에 존재하면 isSuccess : false
회원가입시 입력한 닉네임이 DB내에 존재하면 isSuccess : false
입니다. 하지만 계속 중복 아이디, 중복 닉네임으로의 가입이 성공하더라고요..
간단하다고 생각했는데 어떤 부분이 부족한 건지 잘 모르겠습니다.
살짝씩 수정은 있었지만 시도해본 노력의 전체적인 틀은 아래 첨부한 코드와 같습니다.
(원본 코드는 아니고 구현하고자 하는 부분만 긁어왔습니다! 첨부한 컨트롤러 부분의 코드는 강사님이 최종 배포하셨던 indexController.js파일의 106번째 줄에 삽입했었습니다.😢)
- 아 래 -
// 컨트롤러
// DB 회원 검증(중복 아이디 확인)
const {ccID} = req.body.userID;
const [chkID] = await indexDao.checkID(connection, userID);
if(chkID.includes(ccID)) {
return res.send({
isSuccess : false,
code : 400, // 요청 실패시 400번대 코드
message : "이미 존재하는 아이디입니다.",
});
}
// DB 회원 검증(중복 닉네임 확인)
const {ccNn} = req.body.nickname;
const [chkNick] = await indexDao.checkNick(connection, nickname);
if(chkNick.includes({ccNn})) {
return res.send({
isSuccess : false,
code : 400, // 요청 실패시 400번대 코드
message : "이미 존재하는 닉네임입니다.",
});
}
// 다오
// DB 회원 검증(중복 아이디 확인)
exports.checkID = async function (connection, userID) {
const Query = `SELECT userID FROM Users WHERE userID = ? AND status = 'A';`;
const Params = [userID];
const rows = await connection.query(Query, Params);
return rows;
};
// DB 회원 검증(중복 닉네임 확인)
exports.checkNick = async function (connection, nickname) {
const Query = `SELECT nickname FROM Users WHERE nickname = ? AND status = 'A';`;
const Params = [nickname];
const rows = await connection.query(Query, Params);
return rows;
};
답변에 미리 감사드립니다!😊
답변 1
0
안녕하세요.
열심히 수강해주셔서 감사합니다.
#으로 표시된 부분을 한번 살펴보시면 좋을 것 같아요!
바디에서 값을 가져올 때 비구조할당으로 선언해서 아마 ccID 등이 안잡힐 것 같아요!
// DB 회원 검증(중복 아이디 확인)
const {ccID} = req.body.userID; ############################################ const ccID = req.body.userID
########################################################################### console.log(ccID)로 ccID가 잘 넘어오는지 확인
const [chkID] = await indexDao.checkID(connection, userID);
if(chkID.includes(ccID)) {
return res.send({
isSuccess : false,
code : 400, // 요청 실패시 400번대 코드
message : "이미 존재하는 아이디입니다.",
});
}
// DB 회원 검증(중복 닉네임 확인)
const {ccNn} = req.body.nickname; ####################################################### 상기 언급한 내용과 동일
########################################################################### console.log(ccNn)로 ccID가 잘 넘어오는지 확인
const [chkNick] = await indexDao.checkNick(connection, nickname);
if(chkNick.includes({ccNn})) { ###################################################################### .includes(ccNn) 으로 수정
return res.send({
isSuccess : false,
code : 400, // 요청 실패시 400번대 코드
message : "이미 존재하는 닉네임입니다.",
});
우선 코드는 아시는대로 위에서부터 아래로 해석됩니다. 따라서 const ccID = res.body.ccID; 아래줄에서 console에 찍어보시면 된답니다.
도메인 연동과 nodemon은 관련성이 낮아서 다른 문제가 발생한 것일 수 있습니다. 예를들면 axios 요청 주소를 변경하지않아서 요청이 제대로 들어가지 않는 등의 문제죠.. 이 문제는 직접 제가 확인하는게 빠를 것 같은데요. wjdwldns0905@gmail.com 으로 ssh 접속정보를 주시면 도와드릴 수 있을 것 같아요. 다만 제가 이번주엔 외국에 있어서 pc사용이 어렵습니다 ㅜ 다음주 월요일에 바로 확인해보도록하겠습니다. 감사합니다.
헉 감사합니다! 바쁘신데도 답 주셔서..
혹시 ssh 접속 정보라면 WinSCP 로그인할때의 정보와 키페어를 말씀하시는 걸까요? 제가 잘 몰라서 자꾸 되묻게 되네요 죄송하구 감사합니다🙏
안녕하세요. 현재 배포된 코드 확인해봤습니다.
하지만 아직 위에 올려주신 코드가 반영되어있지 않은 것 같아요.
중복 검사 관련 코드는 미반영된 것 같습니다.
git pull 해보신 다음, pm2 재시작 해보시면 될 것 같아요!
checkID 의 리턴값은 다음과 같이 리스트 안에 여러개의 객체가 존재합니다.
반면 컨트롤러에서는 이를 includes 함수를 사용해서 체크하고 있는데요,
includes 는 우리가 원하는 기능에 적합하지 않은 함수입니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
이럴때는 checkID의 리턴값, 배열의 길이를 검사해서 1개 요소 이상 들어있다면 중복된 ID로 판별하는게 더욱 적절할 것 같습니다.
정리하자면, controller에서 중복 아이디, 닉네임을 검사하는 비즈니스 로직에 문제가 있는 것입니다. len값 비교로 해보시는 것을 추천드려요!
답변 감사합니당
가이드 해주신대로 코드 수정해봤는데 안되네요..
그래서 콘솔로 ccID를 찍어보고 싶었는데
도메인 연동한 뒤로는 nodemon으로 확인이 안되더라구요..
브라우저 콘솔창에서도 안뜨고..........
console.log(ccID); 부분을 어디서 확인해야할지 모르겠어요ㅠㅡㅠ