- 프론트 엔드 & 백엔드 리팩토링 진행 중
- 이런식으로 키에러와 빈값 에러를 같은 관심사임에도 따로 처리해주고 있어서 유지보수에 효율적이지 못했다.
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라는 메서드를 써보려한건데 꽤 복잡하고 좋지 못한 코드라는 생각이 든다.
- 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)까지 도달한다.
- 중간 중간에 있는 작은 통로는 각각의 에러를 처리하는 통로를 의미한다.
- 잘한 점과 개선할 점
- 다시 일일 회고록 작성을 시작한 점!
- 할 수 있었 음에도 계속 미뤄왔던 일들에 대해서 반성!
- HOOKS 배우고 세션 기록해서 블로깅하기
- HOOKS로 프론트 리팩토링 정리하기
- 백엔드 멘토님께 리팩토링한거 질문드리기
- 백엔드 프리즈마랑 UD 공부하기