mongoDB 연습하기

·2022년 3월 23일
0

TIL

목록 보기
5/36

복습 겸 코드는 다음에 줄이고...... 그냥 주석달아서 설명
말로 하면 생각의 정리가 모자라서 글로 적는게 좋다.

post에서 해야하는 것

  1. 번호를 받아서
  2. 토큰을 발송하고
  3. 번호와 토큰을 데이터베이스에 저장하고
  4. 같은 번호로 올 경우에는 토큰만 재발급해서 저장
  5. 다른 번호면 그냥 새로 저장

patch에서 해야하는 것

  1. 번호랑 토큰을 받아서
  2. 디비에 있는 정보랑 일치여부 확인
  3. 불일치하면 false 넘겨주기
  4. 일치하면 true 반환하고 isAuth값 true로 변경
app.post("/tokens/phone", async (req, res) => {
  const phone = req.body.myphone;
  // 요청받은 핸드폰 번호 담아두기
  let check = await Phone.findOne({ phone: `${phone}` }).exec();
  // 그 핸드폰 번호를 템플릿 리터럴로 잡아서 Phone의 데이터베이스에서 꺼내오고, 함수에 담음
  if (check === null) {
    check = "1";
  }
  // 데이터베이스가 빈 것을 방지하기 위한 예외처리

  checkValidationPhone(phone);
  // 1.  휴대폰 검증 함수
  const isValid = checkValidationPhone(phone);
  if (isValid) {
    // 2. 토큰 만드는 함수
    const mytoken = getToken();
    // 3. 문자 전송하는 함수
    sendTokenToSMS(phone, mytoken);


    if (phone !== check.phone) {
    // 요청받은 핸드폰 번호와, 그 요청받은 번호로 검색한 DB 저장소의 핸드폰 번호의  >> 다르다면 <<  
      const myphone = new Phone({
        token: mytoken,
        phone: `${phone}`,
        isAuth: false,
      });
      // 새로운 데이터 베이스를 만들어서
      await myphone.save();
      // 저장하고
      res.send("인증완료!");
      // 클라이언트에게 인증완료 메세지 발송
    } else {
    // 만약에 요청받은 번호와 요청받은 번호로 검색한 DB 저장소의 핸드폰 번호가 >> 같다면 <<
      res.send("토큰변경!");
      // 클라이언트에게 토큰 변경 메세지 발송
      await Phone.updateOne({ phone: `${phone}` }, { token: mytoken });
      // 요청받은 번호로 검색한 DB의 token을 새로 발급받은 것으로 변경
    }
  }
});

app.patch("/tokens/phone", async (req, res) => {
  const myphone = req.body.myphone;
  // 요청받은 핸드폰 번호 저장
  const token = req.body.token;
  // 요청받은 토큰 저장
  let db = await Phone.findOne({ phone: `${myphone}` }).exec();
  // 요청받은 번호로 DB에서 검색
  if (db === null) {
    db = "1";
  }
  // 데이터베이스가 빈 것을 방지하기 위한 예외처리
  if (myphone !== db.phone || token !== db.token) {
  // 요청받은 번호 or 토큰과 DB에 있는 번호 or 토큰이 다를 경우에는
    res.send("false");
    // 클라이언트에게 false 메세지 발송
  } else {
  // 번호, 토큰 둘 다 같을 경우에
    await Phone.updateOne({ phone: `${myphone}`}, { isAuth: true });
    // 요청받은 핸드폰으로 접근한 DB의 isAuth값을 true로 변경
    res.send("true");
    // 클라이언트에게 true 메세지 발송
  }
});
profile
물류 서비스 Backend Software Developer

0개의 댓글