개발일지

개발일지 36일차

index.ys 2023. 4. 22. 01:59

Node.js 과제 lv2

트러블슈팅

post요청 에러핸들링

- 아래 데이터를 body에 입력하고 post요청을 하였으나 모든 조건문에서 조건이 걸리지 않고 바로 400에러를 반환하는 문제가 있었다

- 반환데이터


- # 412 body 데이터가 정상적으로 전달되지 않는 경우

입력된 데이터의 오류라면 아래 있는 조건문에 걸려 콘솔로 1을 출력하고 status 412를 반환하고 에러를 출력할 것 이라고 생각했는데 그게 아니라 모든 조건문을 통과했다.

        //412 body 데이터가 정상적으로 전달되지 않는 경우
        if (!title || !content) {
            console.log(1)
            res.status(412).json({ "errorMessage": "데이터 형식이 올바르지 않습니다." })
            return
        }
        if (typeof title !== 'string' || typeof content !== 'string') {
            console.log(1)
            res.status(412).json({ "errorMessage": "데이터 형식이 올바르지 않습니다." })
            return
        }


- # 412 Title의 형식이 비정상적인 경우
{"errorMessage": "게시글 제목의 형식이 일치하지 않습니다."}

  //# 412 Title의 형식이 비정상적인 경우
   const isExisttitle = Object.keys(req.body).includes('title')
   const isExistcontent = Object.keys(req.body).includes('content')
        if (!isExisttitle) {
            console.log(2)
            res.status(412).json({ "errorMessage": "게시글 제목의 형식이 일치하지 않습니다." })
            return
        }

2번째 에러 케이스:  title의 키값은 제대로 입력되었으나 content 데이터가 아예 없으므로 조건문에 걸려야 한다고 생각했다.


- # 412 Content의 형식이 비정상적인 경우
이번 케이스 에서도 조건문에 걸리지 않고 에러 400을 반환했다. 어떤 부분이 문제인제 콘솔로 모든 변수와 데이터를 확인 해봤으나 어떤 부분인 문제인지 파악하지 못하였다.

  // # 412 Content의 형식이 비정상적인 경우
        if (!isExistcontent) {
            console.log(3)
            res.status(412).json({ "errorMessage": "게시글 내용의 형식이 일치하지 않습니다." })
            return
        }

- # 400 예외 케이스에서 처리하지 못한 에러

{"errorMessage": "게시글 작성에 실패하였습니다."}

 // 400 예외 케이스에서 처리하지 못한 에러
        console.log(4)
        res.status(400).json({ "errorMessage": "게시글 작성에 실패하였습니다." })

정규표현식 참고

이 함수는 닉네임 문자열을 받아들이고, 정규식 표현을 사용하여 유효성을 검사합니다. 정규식 /^[a-zA-Z0-9]{4,}$/은 다음과 같이 해석됩니다.

//유효성 검사 함수
function isValidNickname(nickname) {
    const nicknameRegex = /^[a-zA-Z0-9]{4,}$/;
    return nicknameRegex.test(nickname);
}
  • ^: 문자열의 시작을 의미합니다.
  • [a-zA-Z0-9]: 알파벳 대소문자 및 숫자를 의미합니다.
  • {4,}: 앞의 문자 클래스(대괄호)가 4번 이상 반복되어야 함을 의미합니다.
  • $: 문자열의 끝을 의미합니다.

다음과 같은 문자열 허용

  • "abcd"
  • "1234"
  • "AbCd"
  • "aBcDeFgH123"

다음과 같은 문자열 거부

  • "abc"
  • "ABCD"
  • "12"
  • "!@#"
  • "abc!@#"
  • "a b c d" (공백이 있음)

내일 할일 : lv2과제 완성, api별로 미들웨어 추가 및 에러 핸들링 추가 , 정규표현식 이해