유효성 (=타당성) 링크
if문을 사용하여 유효성을 검사하는 방법은, if문이 길어질 경우 복잡해지며 가독성이 떨어집니다.
중복되는 내용의 코드가 존재하며, 에러 발생시 직접 문제위치를 찾아서 수정해야합니다.
router
.route('/')
.get((req, res) => {// 채널 전체 조회
var { userId } = req.body
var channels = []
if (db.size && userId) {
db.forEach(function (value, key) {
if (value.userId === userId) // value의 userId === requset의 userId
channels.push(value)
})
if (channels.length) {
res.status(200).json(channels)
} else {
notFoundChannel()
}
} else {
res.status(404).json({
message: "조회할 채널이 없습니다."
})
}
})
express-validator 링크
npm i express-validator는 유효성 검사를 수행하는 라이브러리입니다.
const express = require('express')
const router = express.Router()
const conn = require('../../../w6/5-6/mariadb')
router.use(express.json())
const { body, param, validationResult } = require('express-validator') <-
const {} 안의 내용은 다음과 같습니다.
.post(
[body('userId').notEmpty().isInt().withMessage('userId는 숫자로 입력'),//userId 검사 - 비어있지 않고, 숫자여야 한다.
body('name').notEmpty().isString().withMessage('name은 문자로 입력')]//배열 형태로 조건 여러개추가
, (req, res) => {// 채널 개별 생성
const err = validationResult(req)
if (!err.isEmpty()) {
//console.log("err 발생, userId가 유효성 검사에 통과하지 못했습니다.")
console.log()//error message
return res.status(400).json(err.array()) //return 하고 함수종료 - 아래코드 실행x
}
~
~
POST요청으로 body로 부터 전달된 userId값에 대한 유효성을 검사합니다.
.notEmpty() 비어있지 않아야합니다.
.isInt() int형인지 확인합니다.
.withMessage 검증에 이상이 있는경우 오류메시지를 전달합니다.
여러개의 유효성 검사는 대괄호 [ ]로 묶어서 배열형태로 작성합니다.
검증에 이상이 있는경우 if문의 상태코드를 전달합니다.
err.array()는 검증에서 발생한 오류의 내용(오류 결과)을 배열형식으로 전달합니다.
return으로 전달하며, 함수실행을 중단합니다.
리펙토링을 진행하면서 중복, 예외처리 등 늘어나는 코드의 길이를 보면서 계속해서 if문은 중첩되고, 하나하나 예외1 예외2 각각 처리를 시켜주고있는데, 이렇게 코드가 작성되면 나중에 기억은 할 수 있는지, 관리를 어떻게 하는지 의문이 있었는데, 유효성 검사를 지원하는 라이브러리로 중복을 줄이고 좀 더 간결하게 데이터검증을 할 수 있다는 것을 알 수 있었습니다.
name이 int형으로 들어갈 경우 오류메시지