19. Node 가계부 만들기 [ 가계부 전송 받은 데이터 유효성 검사 ] - 6

2022. 5. 29. 15:43프로젝트/가계부 - 제작 JavaScript

express-validator 사용 방법 : https://crispypotato.tistory.com/212

 

* accounts.route.js 에서 DayAccountFind는 날짜 형식만 바꿔주면 재사용이 가능하여

데이터 형식을 express-validator의 match로 일, 월, 년 형식을 따로 분리해서 만들었다.

 

accounts.validator.js 작성

//accounts.validator.js

const { param, body } = require('express-validator')

const Index = param('index').notEmpty().isNumeric()

const DateBody = body('date')
  .notEmpty()
  .isLength(10)
  .matches(/^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/)
const DateParam = param('date')
  .notEmpty()
  .isLength(10)
  .matches(/^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/)

const BigCategoryBody = body('bigCategory').notEmpty()
const SmallCategoryBody = body('smallCategory').notEmpty()
const CardBody = body('card').notEmpty()
const CostBody = body('cost').isNumeric().notEmpty()

const Month = param('date')
  .notEmpty()
  .isLength(7)
  .matches(/^\d{4}-(0[1-9]|1[012])$/)

const Year = param('date')
  .notEmpty()
  .isLength(4)
  .matches(/^\d{4}$/)

const Card = param('card')
  .exists()
  .matches(/^(cash|shinhan|samsung|hyundai|woori|lotte|kb)$/)
  .notEmpty()
  .isString()

module.exports = {
  Index,
  DateBody,
  DateParam,
  BigCategoryBody,
  SmallCategoryBody,
  CardBody,
  CostBody,
  Month,
  Year,
  Card
}

 

accounts.route.js 수정

const express = require('express')
const router = express.Router()
const { Validator } = require('../../lib/validator')
const {
  Index,
  DateBody,
  DateParam,
  BigCategoryBody,
  SmallCategoryBody,
  CardBody,
  CostBody,
  Month,
  Year,
  Card
} = require('./accounts.validators')
const {
  CreateAccount,
  UpdateAccount,
  DeleteAccount,
  DayAccountFind,
  CardAccountFind
} = require('./accounts.service')

// 가계부 작성
router.post(
  '/:date',
  [
    DateParam,
    BigCategoryBody,
    SmallCategoryBody,
    CardBody,
    CostBody,
    Validator
  ],
  CreateAccount
)

// 가계부 수정
router.patch(
  '/:index',
  [
    Index,
    DateBody,
    BigCategoryBody,
    SmallCategoryBody,
    CardBody,
    CostBody,
    Validator
  ],
  UpdateAccount
)

// 가계부 삭제
router.delete('/:index', [Index, Validator], DeleteAccount)

// 해당 날짜 가계부 확인
router.get('/day/:date', [DateParam, Validator], DayAccountFind)

// 월 별 가계부 확인
router.get('/month/:date', [Month, Validator], DayAccountFind)

// 년 별 가계부 확인
router.get('/year/:date', [Year, Validator], DayAccountFind)

// 해당 날짜 카드별 상세 확인
router.get(
  '/card/:card/day/:date',
  [Card, DateParam, Validator],
  CardAccountFind
)

module.exports = router
728x90
반응형