유효성검사

airbus·2025년 2월 27일

프로그래머스

목록 보기
27/93
post-thumbnail

유효성 검사

유효성 (=타당성) 링크

  • 입력받은 데이터가 규칙/조건에 맞는지 확인하는 과정.
  • 정의된 항목에 대한 입력을 제한하며, 유효성 검사에 대한 설명과, 오류메시지를 전달하여 정확한 데이터를 유지합니다.

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 {} 안의 내용은 다음과 같습니다.

  • body : body로 들어온 POST, PUT 같은 요청의 데이터를 검사합니다.
  • params : GET DELETE 요청같이 URL의 파라미터로 들어온 값을 검사합니다.
  • validationResult : 유효성검사 결과를 나타냅니다.
    .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형으로 들어갈 경우 오류메시지

0개의 댓글