[NodeJS] express-validator

기면지·2021년 5월 9일
4

NodeJS

목록 보기
1/1
post-thumbnail

안녕하세요, 김현지입니다.
오늘은 유효성 검사를 깔끔하게 할 수 있는 express-validator에 대해 알아보겠습니다!


express-validator

express-validator는 express에서 사용할 수 있는 유효성 검사 모듈입니다.
미들웨어 함수로도 사용할 수 있고, API 형태로 활용도 가능합니다.
validator.js를 활용해 편리하게 제작된 모듈입니다.

POST 라우터를 구현할 때, Client(View) 수준에서만 유효성 검사를 진행할 경우 여러 취약점이 발생하기 때문에 Controller 수준의 서버에서의 유효성 검증이 꼭 필요합니다.

간단한 유효성 검증 방법

import { check, validationResult } from "express-validator";

import 문을 활용해서 express-validator를 사용합니다.

router.post(
    "/",
    [
        check("name", "Name is required").not().isEmpty(),
        check("email", "Please include a valid email").isEmail(),
  // ...
);

POST 라우터 코드의 인자로 check()를 사용합니다.
check()는 request 파라미터를 인자로 받습니다.
그 후에 validationResult()를 활용해서 유효성 검사를 진행하면 됩니다.

여기에서 check() 뒤에 not isEmpty 등의 간단한 검증이 나열되어있습니다. (아래 참고)

  • name: Empty가 아니여야 함.
  • email: email 형식에 맞아야 함.

POST 라우터 코드의 인자로 유효성을 검사할 check()를 넘겨주었으면, 비즈니스 코드를 작성하는 부분 (콜백 부분) 에 validationResult를 사용하면 됩니다.

router.post(
    "/",
    [
        check("name", "Name is required").not().isEmpty(),
        check("email", "Please include a valid email").isEmail()
    ]
    async (req, res) => {
        const errors = validationResult(req);
      // ...
    }
  );

validationResult는 request로 넘어오는 파라미터들을 check 부분의 유효성을 검증한 후 에러가 발생하면 배열 형태로 반환하는 함수입니다.
따라서 저 errors가 비었으면 유효성 검증이 통과된 것입니다.

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

그래서 위의 형태로 에러 처리를 해주면 유효성 검증을 짧고 간단한 코드로 할 수 있습니다.

만약, 복잡하고 긴 형태의 유효성 검증이 필요하다면 미들웨어 함수로 따로 분리한 후에 활용하는 방법을 사용하시는 것이 좋을 것 같습니다.

유용한 express-validator 함수들

  • trim() : 공백을 제거해줍니다.
  • isLength(num) : 길이가 num인지 확인해줍니다. { min: num, max: num } 과 같이 최소, 최대 값도 지정할 수 있습니다.
  • bail() : 해당 부분에서 에러가 발생하면 다음으로 넘어가지 않습니다.
  • isNumeric() : 숫자 형태이지 확인한다. string이어도 해당 string이 숫자인지 확인해줍니다.
  • isEmail() : string이 이메일 형태인지 확인해줍니다.
  • isJSON() : string이 유효한 JSON인지 확인해줍니다. JSON.parse를 사용한다고 합니다.
  • isMobilePhone() : string이 모바일 휴대폰 번호인지 확인해줍니다.

이외에 더 많은 함수는 validator.js를 확인해주세요 :)


참고자료

validator.js
express-validator
validation input in Express using express-validator

profile
𝙎𝙈𝘼𝙇𝙇 𝙎𝙏𝙀𝙋𝙎 𝙀𝙑𝙀𝙍𝙔 𝘿𝘼𝙔

2개의 댓글