[프로그래머스 데브코스] TIL - 6주차 DAY1

방울·2024년 5월 13일
0

Express에서의 유효성 검사 - express-validator 활용하기

웹 애플리케이션 개발 시 사용자로부터 입력받은 데이터의 유효성을 검사하는 것은 매우 중요하다. Node.js의 Express 프레임워크에서는 express-validator 모듈을 통해 간편하게 입력 데이터의 유효성 검사를 수행할 수 있다. 이 글에서는 express-validator의 기본 사용법과 실제 프로젝트에서 유효성 검사 로직을 모듈화하는 방법에 대해 알아보자.

express-validator 설치 및 기본 사용법

먼저 express-validator를 프로젝트에 설치한다.

npm install express-validator

설치가 완료되면, 다음과 같이 express-validator의 검사 함수들을 이용하여 유효성 검사를 수행할 수 있다.

const express = require('express');
const { body, validationResult } = require('express-validator');
const app = express();

app.use(express.json());

app.post('/user', [
  body('userId').notEmpty().isInt().withMessage('userId는 숫자여야 합니다.'),
  body('name').isString().isLength({ min: 2 }).withMessage('이름은 2글자 이상의 문자열이어야 합니다.')
], (req, res) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(400).json({ errors: errors.array() });
  }
  // 데이터 처리 로직
});

app.listen(3000);

위 예제에서는 POST 요청으로 전달된 userIdname 필드에 대한 유효성 검사를 수행한다. userId는 비어 있지 않고 숫자여야 하며, name은 문자열이고 최소 2글자 이상이어야 한다. 유효성 검사에 실패한 경우, 400 상태 코드와 함께 에러 메시지를 응답한다.

유효성 검사 미들웨어 분리

유효성 검사 코드는 여러 라우트에서 중복될 수 있으므로, 반복을 피하기 위해 별도의 미들웨어로 분리하는 것이 좋다. 이를 위해 먼저 유효성 검사 결과를 확인하고 처리하는 로직을 함수로 만든다.

const { validationResult } = require('express-validator');

const validate = (req, res, next) => {
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(400).json({ errors: errors.array() });
  }
  next();
};

이제 validate 함수를 미들웨어로서 사용하여 유효성 검사 로직을 재사용할 수 있다.

const express = require('express');
const { body } = require('express-validator');
const app = express();
app.use(express.json());

app.post('/user', [
  body('userId').notEmpty().isInt(),
  body('name').isString().isLength({ min: 2 }),
  validate
], (req, res) => {
  // 데이터 처리 로직
});

app.listen(3000);

위와 같이 유효성 검사 로직을 분리함으로써, 코드의 중복을 줄이고 유지보수를 용이하게 할 수 있다.

정리

express-validator를 사용하여 Express 애플리케이션에서 입력 데이터의 유효성을 쉽게 검사할 수 있다. 유효성 검사 로직을 미들웨어로 분리함으로써 코드의 재사용성을 높이고, 프로젝트의 구조를 개선할 수 있다.

profile
방울방울

0개의 댓글