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별로 미들웨어 추가 및 에러 핸들링 추가 , 정규표현식 이해