📝Day 90(64)일차 WE_MOTIVATION_DIARY

김민재·2021년 10월 20일
0

빡코딩 다이어리

목록 보기
83/87
post-thumbnail

- 프로젝트 진행현황

  • 프론트 엔드 & 백엔드 리팩토링 진행 중

- TODAY I LEARN ERROR 🦠

  • 이런식으로 키에러와 빈값 에러를 같은 관심사임에도 따로 처리해주고 있어서 유지보수에 효율적이지 못했다.
if (emptyKey.length !== 0) {
    next(new AppError.keyError(`${emptyKey} 키가 비어있습니다`));
    return;
  }
  const emptyKeyOfValue = checkEmptyKeyOfValue(userInfo);
  if (emptyKeyOfValue) {
    next(new AppError.valueOfKeyError(`${emptyKeyOfValue}을 입력해주세요`));
    return;
  }
  • 키에러와 빈값을 확인해주는 모듈 함수
export const checkEmptyKeyOfValue = (userInfo) => {
  const userInputData = Object.entries(userInfo);
  const userInputInfo = new Map(userInputData);
  for (let data of userInputInfo) {
    if (data[1] === '') return data[0];
  }
};
export const checkEmptyKey = (KeyList, userInfo) => {
  const keyArr = [];
  let emptyKeyArr = [];
  const userInputData = Object.entries(userInfo);
  const userInputInfo = new Map(userInputData);
  for (let key of userInputInfo.keys()) {
    if (KeyList.includes(key)) {
      keyArr.push(key);
      const InputKeyAndListArr = keyArr.concat(KeyList);
      const emptyKey = InputKeyAndListArr.filter((e) => !keyArr.includes(e));
      emptyKeyArr = [...emptyKey];
    }
  }
  return emptyKeyArr;
};
  • map이라는 자료구조를 써보고싶어서 썼지만 효과적인 코드가 아니라는 생각이들었고 꼭 entries와 같은 메서드를 써서 키와 값 쌍을 map안에 넣어줘서 keys라는 메서드를 써보려한건데 꽤 복잡하고 좋지 못한 코드라는 생각이 든다.

- HOW TO FIX MY ERROR 💊

  • ERROR를 해결한 object.keys()🔑
  • 수정된 코드
import AppError from '../errors/appError';
export const validation = (userInfo, KeyList) => {
  const { email, password, name, address } = userInfo;
  const essentialInfo = { email, password, name, address };
  const keys = Object.keys(userInfo);
  // undefined, null, ''(빈스트링) 모두 잡을 수 있도록 essentialInfo[key]가 false인 경우 반환하도록
  const emptyInfoValue = keys.filter((key) => !essentialInfo[key]);
  const emptyInfoKey = KeyList.filter((key) => keys.indexOf(key) === -1);
  if (emptyInfoKey.length !== 0) {
    return new AppError.keyError(`${emptyInfoKey}_KEY_EMPTY`);
  }
  if (emptyInfoValue.length !== 0) {
    return new AppError.valueOfKeyError(`${emptyInfoValue}_VALUE_EMPTY`);
  }
};
  • map을 사용해서 구현했었는데 object.keys를 통해서도 키에러와 키의 값 에러를 모두 처리할 수 있었음

- 모르는 점

<리팩토링 반영 사항>

  • 빈 키, 빈 값 함수모두 validation관련 함수이므로 하나의 함수에 담아서 처리할 것
    => 리팩 토링 완료
  • 모델 단 userDao에서 sql문의 리턴 값 존재여부(배열의 길이가 0초과 인지 아닌지)를 판단하고서 첫번 째 요소를 리턴해주기
  • 회원가입 컨트롤러에서 user가 있는 경우 if (user) else 조건을 붙이지 않은 이유는 asyncCatch 모듈로 비동기 함수가 try catch를 잡아준 뒤 next로 에러를 잡아주고 있는 형태이기 때문에 이 랩퍼 모듈함수로 컨트롤러 전체를 감싸주니 모드 에러를 전역 핸들러에서 잡을 수 있게 되어 else문을 따로 빼지 않았다. 이 부분에 대해서 내일 멘토님께 질문해야겠다.

- 배운점

  • 입력값과 출력값이 다르면 컨트롤러를 구분해줘야한다.
  • !!을 붙이면 해당 값이 false인지 true인지 판별할 수 있다.

    -레이어드 패턴의 흐름을 표현하는 그림
  • 큰 통로를 통해 요청(req)이 응답(res)까지 도달한다.
  • 중간 중간에 있는 작은 통로는 각각의 에러를 처리하는 통로를 의미한다.

- 잘한 점과 개선할 점

  • 다시 일일 회고록 작성을 시작한 점!
  • 할 수 있었 음에도 계속 미뤄왔던 일들에 대해서 반성!

- 목표와 마감기한: 2021-10-22

  • HOOKS 배우고 세션 기록해서 블로깅하기
  • HOOKS로 프론트 리팩토링 정리하기
  • 백엔드 멘토님께 리팩토링한거 질문드리기
  • 백엔드 프리즈마랑 UD 공부하기
profile
자기 신뢰의 힘을 믿고 실천하는 개발자가 되고자합니다.

0개의 댓글