inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

비전공자를 위한 풀스택 맛집지도 만들기 프로젝트!: Front, Back-end 그리고 배포까지

중복 아이디 및 닉네임 검사

1393

송이

작성한 질문수 2

0

안녕하세요 강사님!

강의 너무 잘 들었습니당ㅎㅎ

우여곡절이 많아서 질문을 올릴까 말까 고민한 적도 많았지만 숱한 구글링 끝에 스스로 오류를 다 잡고 끝내서 더 뿌듯한 것 같아요.

역시 개발을 하고자 했으면 구글링은 필수!!

 

하지만 강의 내에서 다루지 않았던 회원 가입시 중복 아이디 검사에서는 무너져내렸습니다.

제가 이 기능을 구현하고자 생각했던 것은

  1. 회원가입시 입력한 아이디가 DB내에 존재하면 isSuccess : false

  2. 회원가입시 입력한 닉네임이 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;
    
};

 

답변에 미리 감사드립니다!😊

javascript HTML/CSS rest-api github aws mysql git

답변 1

0

Jay

안녕하세요.

열심히 수강해주셔서 감사합니다.

#으로 표시된 부분을 한번 살펴보시면 좋을 것 같아요!

바디에서 값을 가져올 때 비구조할당으로 선언해서 아마 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

Jay

  1. 우선 코드는 아시는대로 위에서부터 아래로 해석됩니다. 따라서 const ccID = res.body.ccID; 아래줄에서 console에 찍어보시면 된답니다.

  2. 도메인 연동과 nodemon은 관련성이 낮아서 다른 문제가 발생한 것일 수 있습니다. 예를들면 axios 요청 주소를 변경하지않아서 요청이 제대로 들어가지 않는 등의 문제죠.. 이 문제는 직접 제가 확인하는게 빠를 것 같은데요. wjdwldns0905@gmail.com 으로 ssh 접속정보를 주시면 도와드릴 수 있을 것 같아요. 다만 제가 이번주엔 외국에 있어서 pc사용이 어렵습니다 ㅜ 다음주 월요일에 바로 확인해보도록하겠습니다. 감사합니다.

0

송이

헉 감사합니다! 바쁘신데도 답 주셔서..

혹시 ssh 접속 정보라면 WinSCP 로그인할때의 정보와 키페어를 말씀하시는 걸까요? 제가 잘 몰라서 자꾸 되묻게 되네요 죄송하구 감사합니다🙏

0

Jay

네네 아닙니다 ip랑 키페어 주시면 됩니다!!

0

송이

메일 드렸습니당!

0

Jay

안녕하세요. 현재 배포된 코드 확인해봤습니다.

하지만 아직 위에 올려주신 코드가 반영되어있지 않은 것 같아요.

중복 검사 관련 코드는 미반영된 것 같습니다.

git pull 해보신 다음, pm2 재시작 해보시면 될 것 같아요!

0

송이

아 그렇네요 코드 다시 반영시켰어요!
질문 내용이 달라진 건 없습니다

pm2 재시작도 완료했는데 똑같네요ㅜㅜ

0

Jay

image

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