요청이나 데이터들이 유효한지 확인하는 유효성 검사 모듈
[ 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를 생성할 때 필수로 들어가야할 요소들과, 그 요소에 해당하는 유효성을 검증하는 코드 입니다.
아까 사용하지 않았던 코드와 다르게 보기만 해도 어떤 부분이 필요한지, 어떤 유효성 검사를 통과해야하는지 한 눈에 직관적으로 알 수 있고, 통일성 있게 구성할 수 있어 협엽할 때도 확실히 도움이 많이 되었습니다.
trim()
: 공백을 제거해줍니다.isLength(num)
: 길이가num
인지 확인해줍니다.{ min: num, max: num }
과 같이 최소, 최대 값도 지정할 수 있습니다.bail()
: 해당 부분에서 에러가 발생하면 다음으로 넘어가지 않습니다.isNumeric()
: 숫자 형태이지 확인한다. string이어도 해당 string이 숫자인지 확인해줍니다.isEmail()
: string이 이메일 형태인지 확인해줍니다.isJSON()
: string이 유효한 JSON인지 확인해줍니다. JSON.parse를 사용한다고 합니다.isMobilePhone()
: string이 모바일 휴대폰 번호인지 확인해줍니다.withMessage
: 유효성 검사가 실패 했을시validationResult
로 에러 메세지를 전달해주기 위해 사용합니다.