중복 아이디 및 닉네임 검사
1393
작성한 질문수 2
안녕하세요 강사님!
강의 너무 잘 들었습니당ㅎㅎ
우여곡절이 많아서 질문을 올릴까 말까 고민한 적도 많았지만 숱한 구글링 끝에 스스로 오류를 다 잡고 끝내서 더 뿌듯한 것 같아요.
역시 개발을 하고자 했으면 구글링은 필수!!
하지만 강의 내에서 다루지 않았던 회원 가입시 중복 아이디 검사에서는 무너져내렸습니다.
제가 이 기능을 구현하고자 생각했던 것은
회원가입시 입력한 아이디가 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 : "이미 존재하는 닉네임입니다.",
});
0
답변 감사합니당
가이드 해주신대로 코드 수정해봤는데 안되네요..
그래서 콘솔로 ccID를 찍어보고 싶었는데
도메인 연동한 뒤로는 nodemon으로 확인이 안되더라구요..
브라우저 콘솔창에서도 안뜨고..........
console.log(ccID); 부분을 어디서 확인해야할지 모르겠어요ㅠㅡㅠ
0
우선 코드는 아시는대로 위에서부터 아래로 해석됩니다. 따라서 const ccID = res.body.ccID; 아래줄에서 console에 찍어보시면 된답니다.
도메인 연동과 nodemon은 관련성이 낮아서 다른 문제가 발생한 것일 수 있습니다. 예를들면 axios 요청 주소를 변경하지않아서 요청이 제대로 들어가지 않는 등의 문제죠.. 이 문제는 직접 제가 확인하는게 빠를 것 같은데요. wjdwldns0905@gmail.com 으로 ssh 접속정보를 주시면 도와드릴 수 있을 것 같아요. 다만 제가 이번주엔 외국에 있어서 pc사용이 어렵습니다 ㅜ 다음주 월요일에 바로 확인해보도록하겠습니다. 감사합니다.
0
헉 감사합니다! 바쁘신데도 답 주셔서..
혹시 ssh 접속 정보라면 WinSCP 로그인할때의 정보와 키페어를 말씀하시는 걸까요? 제가 잘 몰라서 자꾸 되묻게 되네요 죄송하구 감사합니다🙏
0
안녕하세요. 현재 배포된 코드 확인해봤습니다.
하지만 아직 위에 올려주신 코드가 반영되어있지 않은 것 같아요.
중복 검사 관련 코드는 미반영된 것 같습니다.
git pull 해보신 다음, pm2 재시작 해보시면 될 것 같아요!
0

checkID 의 리턴값은 다음과 같이 리스트 안에 여러개의 객체가 존재합니다.
반면 컨트롤러에서는 이를 includes 함수를 사용해서 체크하고 있는데요,
includes 는 우리가 원하는 기능에 적합하지 않은 함수입니다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
이럴때는 checkID의 리턴값, 배열의 길이를 검사해서 1개 요소 이상 들어있다면 중복된 ID로 판별하는게 더욱 적절할 것 같습니다.
정리하자면, controller에서 중복 아이디, 닉네임을 검사하는 비즈니스 로직에 문제가 있는 것입니다. len값 비교로 해보시는 것을 추천드려요!
live server가 안 떠요..
0
81
1
카카오맵 API 가 안뜹니다...
0
703
2
카카오맵API 지도 관련
0
175
1
Putty에서 nginx를 vi로 수정할때 오류
0
286
3
mysql과 선생님의 깃허브 코드연결
0
188
1
nodemon 실행오류
0
235
2
Azure 서버로 구축하고 작업하는 방법 알 수 있을까요?
0
262
2
css 적용 중 강의대로 적용되지 않아 질문 드립니다
0
352
2
강의를 잘 활용하는 법 추천 부탁드립니다.
0
287
1
MysqlWorkbench 접속문제
0
305
1
전체 핀이 조회되지 않습니다.
0
263
1
빅데이터 처리관련
1
286
1
섹션5의 2번째 강의 질문-setMap 비동기 처리 이유
0
239
1
PM2 EADDRINUSE 에러
0
410
2
인스턴스 중단 후 재시작
0
281
1
이미지 부분에 cctv 영상을 넣고 싶은데요.
0
585
2
노션 링크가 어디있나요 ?
1
312
1
axios 이후 마커 오류
0
292
0
service nginx restart 에러
0
712
1
섹션10 배포하기 unbuntu에서 root경로가 안뜹니다ㅠㅠ
0
505
3
선생님 추가적으로 새로운 페이지를 만드려고 하는데요...
0
248
1
코드 질문 드립니다!
0
228
1
혹시 강의자료 노션 내리셨나요?
0
240
1
노드몬 에러 참조하세요
0
360
1





