[Node.js] express-validator

Shin·2022년 4월 4일
0

Node

목록 보기
1/4
post-thumbnail

👨‍🎓 Express-validator 란?

요청이나 데이터들이 유효한지 확인하는 유효성 검사 모듈
[ express-validator is a set of express.js middlewares that wraps validator.js validator and sanitizer functions. ]

❓ 사용하게 된 이유

원래는 함수로 직접 validator를 생성하여 middleware로 사용했었는데, 코드리뷰를 해주던 멘토님이 express-validator 라는 것이 있으니, 쓰면 편할 것 이라는 말씀을 해주셔서 찾아보고 사용해봤는데 코드만 봐도 직관적이고, 어떤 부분의 유효성을 검사하는지 알 수 있는게 좋아서 사용하게 되었다.

🍳 사용 전 코드

function checkProjectCreated(req, res, next) {
  const fields = ["title", "description", "from", "to"];
  const body = Object.keys(req.body);
  const check = fields.filter((field) => !body.includes(field));
  if (check.length) {
    return res.status(400).json({
      success: false,
      error: {
        code: 400,
        message: `${check.join(", ")} 은(는) 필수로 입력해줘야 합니다.`,
      },
    });
  }
  next();
}

위 코드는 express-validator를 사용하지 않고, Project를 생성할 때, 필수로 들어가야할 요소들이 요청 body에 들어가있는지 확인하는 미들웨어 함수의 모습이다.

🔑 사용 후 코드

const validate = (req, res, next) => {
  const errors = validationResult(req);
  if (errors.isEmpty()) {
    return next();
  }
  return res.status(400).json({
    success: false,
    error: {
      code: 400,
      message: errors.array()[0].msg,
      detail: errors.errors,
    },
  });
};
const checkUserCreated = [
  body("name")
    .exists()
    .withMessage("이름을 입력해주세요.")
    .bail()
    .isLength({ min: 2 })
    .withMessage("이름은 필수로 2 글자 이상 입력해야 합니다!")
    .bail(),
  body("email")
    .exists()
    .withMessage("이메일을 입력해주세요.")
    .bail()
    .isEmail()
    .withMessage("올바른 이메일을 입력해주세요.")
    .bail(),
  body("password")
    .exists()
    .withMessage("비밀번호를 입력해주세요.")
    .bail()
    .isLength({ min: 4 })
    .withMessage("비밀번호는 4글자 이상이어야 합니다."),
  validate,
];

위 코드는 User를 생성할 때 필수로 들어가야할 요소들과, 그 요소에 해당하는 유효성을 검증하는 코드 입니다.
아까 사용하지 않았던 코드와 다르게 보기만 해도 어떤 부분이 필요한지, 어떤 유효성 검사를 통과해야하는지 한 눈에 직관적으로 알 수 있고, 통일성 있게 구성할 수 있어 협엽할 때도 확실히 도움이 많이 되었습니다.

🎁 자주 사용하는 express-validator 함수들

  • trim() : 공백을 제거해줍니다.
  • isLength(num) : 길이가 num인지 확인해줍니다. { min: num, max: num } 과 같이 최소, 최대 값도 지정할 수 있습니다.
  • bail() : 해당 부분에서 에러가 발생하면 다음으로 넘어가지 않습니다.
  • isNumeric() : 숫자 형태이지 확인한다. string이어도 해당 string이 숫자인지 확인해줍니다.
  • isEmail() : string이 이메일 형태인지 확인해줍니다.
  • isJSON() : string이 유효한 JSON인지 확인해줍니다. JSON.parse를 사용한다고 합니다.
  • isMobilePhone() : string이 모바일 휴대폰 번호인지 확인해줍니다.
  • withMessage: 유효성 검사가 실패 했을시 validationResult로 에러 메세지를 전달해주기 위해 사용합니다.
profile
누군가의 선택지가 될 수 있는 사람이 되자

0개의 댓글