백앤드/Node.js

[포스코x코딩온] 웹개발자 입문 과정 6주차 | MVC 실습 - 여러 유저 정보 선언 후 로그인 성공 여부 판단하기

영최 2023. 4. 6. 00:27
728x90

데이터 형식(model/User.js)

exports.users = `apple//1234//사과사과
banana//4321//바나나나
happy//qwer234//해피해피`;

컨트롤러 코드(controller/Cuser.js)

내 코드 코드 비교
exports.pactice2 = (req, res) => {
  const userDatas = User.users;
  exist_user_arr = [];
  exist_user_id = [];
  for (array of userDatas.split("\n")) {
    console.log(array.split("//"));
    exist_user_arr.push(array.split("//"));
    exist_user_id.push(array.split("//")[0]);
  }

  if (exist_user_id.includes(req.body.id)) {
    for (let i = 0; i < exist_user_arr.length; i++) {
      if (
        req.body.id === exist_user_arr[i][0] &&
        req.body.pw === exist_user_arr[i][1]
      ) {
        const name = exist_user_arr[i][2];
        res.send({ isLogin: true, name: name });
        break;
      } else if (
        //아이디는 맞는데 비번이 틀릴 경우
        req.body.id === exist_user_arr[i][0] &&
        req.body.pw !== exist_user_arr[i][1]
      ) {
        res.send({ isLogin: false });
      } else {
        continue;
      }
    }
  } else {
    res.send({ isLogin: false });
  }
};
exports.pactice2 = (req, res) => {
  const userDatas = User.users.split("\n");

  const users = [];
  const userIds = [];
  for (let user of userDatas) {
    users.push({
      realId: user.split("//")[0],
      realPw: user.split("//")[1],
      name: user.split("//")[2],
    });
    userIds.push(user.split("//")[0]); // 아이디만
  }

  const idx = userIds.indexOf(req.body.id);
  if (idx >= 0) {
    if (req.body.pw === users[idx].realPw) {
      res.send({ isLogin: true, name: users[idx].name });
    } else {
      res.send({ isLogin: false });
    }
  } else {
    console.log("아이디 없음");
    res.send({ isLogin: false });
  }
};
for 문으로 너무 복잡하게 풀려고 한 것 같다.

1. 자바스크립트는 파이썬과 달리 in  을 못쓰고
array.includes(요소) 로 배열에 요소가 포함되었는지 확인 가능하다.

2. 전체 값을 object 로 push 하고,

users.push({
      realId: user.split("//")[0],
      realPw: user.split("//")[1],
      name: user.split("//")[2],
    });

인덱스 찾을 수 있도록 id만 넣는 배열 만들어서 push 한 후

userIds.push(user.split("//")[0]); // 아이디만

indexOf()값이 0보다 큰지로 먼저 아이디가 정보에 포함되었는지 확인 해서

  const idx = userIds.indexOf(req.body.id);
  if (idx >= 0) {

정보에 아예 없는 경우를 else 처리한 다음
비밀번호가 같은지 index로 확인하고, 
아닐 경우를 else처리하는게 더 깔끔한 듯하다.

728x90