• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 회원정보 수정부분 질문 있습니다.

회원정보 수정부분 질문 있습니다.

5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 글쓴이
  • #71700

    이순민
    참가자
    회원 정보 수정할려고 합니다. 회원정보는 비밀번호를 입력해야 정상적으로 진행됩니다.
    회원수정페이지에서 입력된 데이터를 아래 변수 이름 ~닉네임으로 받아왔습니다.
    여기엔 변경되지 않은 데이터와 변경한 데이터 섞여 있을 수 있습니다.
    그래서 변경되지않은 데이터는 skip하고 변경된 데이터 중 아이디, 닉네임, 이메일을 중복체크 하고 싶습니다.
    어떻게 코드를 짜야할지 모르겠습니다.
    
    (아래 코드는 회원수정페이지에서 입력된 데이터를 그대로 user 컬렉션에 검색했기때문에 기존 회원의 자료를 skip 못하니
    중복체크에 걸립니다.)
    
    //회원정보 수정
    app.put('/userEdit', 로그인했냐, function (요청, 응답) {
      var 이름 = 요청.body.이름;
      var 아이디 = 요청.body.아이디;
      var 비밀번호 = 요청.body.비밀번호;
      var 새비밀번호 = 요청.body.새비밀번호;
      var 닉네임 = 요청.body.닉네임;
      var 이메일 = 요청.body.이메일;
      var 수정정보 = {
        userName: 이름,
        userId: 아이디,
        userPw: createHashedPassword(새비밀번호),
        userNick: 닉네임,
        userEmail: 이메일
      }
      // 기존의 아이디면 넘어가고 아니라면 아이디중복체크(닉네임, 이메일 동일) 해야함.(미구현)
      db.collection('user').findOne({ userId: 요청.user.userId }, function (에러, 결과) {
        if (createHashedPassword(비밀번호) == 결과.userPw) {
          db.collection('user').findOne({ userId: 아이디 }, function (에러, 아이디결과) {
            db.collection('user').findOne({ userNick: 닉네임 }, function (에러, 닉네임결과) {
              db.collection('user').findOne({ userEmail: 이메일 }, function (에러, 이메일결과) {
                db.collection('user').updateOne({ userId: 요청.user.userId }, { $set: 수정정보 }, function (에러, 결과) {
                  if (아이디결과 == null && 닉네임결과 == null && 이메일결과 == null) {
                    응답.send("성공")
                  } else if (아이디결과 != null) {
                    응답.send("중복ID")
                  } else if (닉네임결과 != null) {
                    응답.send("중복Nick")
                  } else if (이메일결과 != null) {
                    응답.send("중복Email")
                  }
                })
              })
            })
          })
        } else {
          응답.send('비밀번호틀림')
        }
      })
    #71722

    codingapple
    키 마스터
    db.collection('user').updateOne({ userId: 요청.user.userId } 는 
    if (아이디결과 == null && 닉네임결과 == null && 이메일결과 == null) { 안에 담으면 될듯요 
    보통 아이디랑 이메일 중 하나는 변경불가능하게 해놓습니다
    #71770

    이순민
    참가자
     
     
     
     
    ChatGPT한테 findOne() 메소드에서 특정 도큐먼트를 제외하는 명령어 있냐 물어보니 $ne 옵션을 이용하면 가능하대서
    $ne 관련 정보좀 찾아보고 적용해봤더니 원하는 결과가 나왔습니다. 혹시 $ne 를 사용하는게 괜찮을까요?
    
    db.collection('user').findOne({ userNick: 닉네임, userId: {$ne: 요청.user.userId } }, function (에러, 닉네임결과) {
    이 코드는 userNick이 닉네임인걸 찾되 userId가 현재로그인된사람 Id면 skip해라라고 생각하면서 명령한건데 정확한건지도 궁금합니다.
    //회원정보 수정
    app.put('/userEdit', 로그인했냐, function (요청, 응답) {
      console.log(1)
      var 이름 = 요청.body.이름;
      var 비밀번호 = 요청.body.비밀번호;
      var 새비밀번호 = 요청.body.새비밀번호;
      var 닉네임 = 요청.body.닉네임;
      var 이메일 = 요청.body.이메일;
      var 수정정보 = {
        userName: 이름,
        userPw: createHashedPassword(새비밀번호),
        userNick: 닉네임,
        userEmail: 이메일
      }
      // 기존의 아이디면 넘어가고 아니라면 아이디중복체크(닉네임, 이메일 동일)
      db.collection('user').findOne({ userId: 요청.user.userId }, function (에러, 결과) {
        if (createHashedPassword(비밀번호) == 결과.userPw) {
          db.collection('user').findOne({ userNick: 닉네임, userId: {$ne: 요청.user.userId } }, function (에러, 닉네임결과) {
            db.collection('user').findOne({ userEmail: 이메일, userId: {$ne: 요청.user.userId } }, function (에러, 이메일결과) {
              console.log("닉넴결과 = "+닉네임결과," 이메일결과 = "+이메일결과)
              if (닉네임결과 == null && 이메일결과 == null) {
                db.collection('user').updateOne({ userId: 요청.user.userId }, { $set: 수정정보 }, function (에러, 결과) {
                  응답.send("성공")
                })
              } else if (닉네임결과 != null) {
                응답.send("중복Nick")
              } else if (이메일결과 != null) {
                응답.send("중복Email")
              }
            })
          })
        } else {
          응답.send('비밀번호틀림')
        }
      })
    #71774

    codingapple
    키 마스터
    원하는거 제외하고 다 찾고 싶으면 $ne 쓰면 됩니다
    #71780

    이순민
    참가자
    항상 감사드립니다.
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠