[TIL] 25.01.20 MON

GDORI·2025년 1월 20일
0

TIL

목록 보기
166/184
post-thumbnail

express-validator

api 서버를 개발하는 도중 미들웨어에서 파라미터를 검증하면 좋을 것 같아 찾아보다가 express-validator 라는 라이브러리를 찾았다.
해당 라이브러리는 Express 애플리케이션에서 HTTP 요청을 처리할 때 바디, 쿼리, 헤더, 경로 등 포함된 데이터 유효성 검사를 쉽게할 수 있게 해주는 미들웨어 라이브러리로 유효하지 않은 데이터가 들어올 때 에러 메세지를 반환할 수 있다.

주요 기능

  • 유효성 검사
    isEmail(): 이메일 형식 검사
    isInt(): 정수형 검사
    isLength(): 길이 검사
    isAlpha(): 알파벳만 검사
    isNumeric(): 숫자만 검사
    isAlphanumeric(): 알파벳과 숫자만 검사
    isIn(): 특정 값이 목록에 포함되어 있는지 검사
    - 예시

    body('username').isLength({ min: 3, max: 20 }).withMessage('Username must be between 	3 and 20 characters')
  • 가공
    trim(): 앞뒤 공백 제거
    escape(): HTML 특수 문자를 이스케이프 처리
    toLowerCase(): 소문자로 변환
    toInt(): 문자열을 정수로 변환
    - 예시

    body('email').normalizeEmail()  // 이메일 주소의 대소문자를 정규화

적용

다른 좋은 방안도 많겠지만 일단 객체로 관리해서 미들웨어로 가져다 쓰는 방식을 생각해봤다.
나중에도 활용을 할 지 보고 이불킥을 할 지는 모르지만 일단 써보자.

params 미들웨어

import { body, validationResult } from 'express-validator';
const errHandler = (req, res, next) => {
  const err = validationResult(req);
  if (!err.isEmpty()) {
    return res.status(400).json({
      statusCode: 400,
      message: 'Parameter validation failed. You can find the reason at "errors"',
      errors: err.array(),
    });
  }
  next();
};

export const paramsValidator = {
  auth: {
    oAuthLogin: [body('code').notEmpty().withMessage('Not found parameter "code"'), errHandler],
  },
  problems: {
    createProblem: [
      body('sector').notEmpty().withMessage('Not found parameter "sector"'),
      body('difficulty').notEmpty().withMessage('Not found parameter "difficulty"'),
      body('title').notEmpty().withMessage('Not found parameter "title"'),
      body('description').notEmpty().withMessage('Not found parameter "description"'),
      body('answer').notEmpty().withMessage('Not found parameter "answer"'),
      body('hint').notEmpty().withMessage('Not found parameter "hint"'),
      body('explanation').notEmpty().withMessage('Not found parameter "explanation"'),
      body('reference').notEmpty().withMessage('Not found parameter "reference"'),
      errHandler,
    ],
  },
};

router 적용 예시

router.post('/git/token', paramsValidator.auth.oAuthLogin, authController.oAuthLogin);

profile
하루 최소 1시간이라도 공부하자..

0개의 댓글

관련 채용 정보