TIL Node.js에서 express-validator를 사용하여 유효성 검증하기

ESH'S VELOG·2023년 6월 27일
0

Validation 유효성 검증

유효성 검증이란 사용자로부터 받은 값을 서버에 보내기 전 올바른 값을 유도할 수 있는지 확인하는 것
ex) 비밀번호에 아이디가 포함되어 있으면 return

기존에는 try / catch문을 사용하여 유효성 검증을 하였다.

try {
	if(!nickname) {
    res.status(400).json({errorMessage:"닉네임은 필수값 입니다."}
    }
    if(!password) { ..... }
} catch (err) {
 console.log(err)
 res.status(400).json({errorMessage:"잘못된 접근입니다."})
}

위와 같이 작성하면 끝도 없이 try catch문이 늘어나고 post를 하기 위한 파일인데 가독성이 떨어지게 되며 유지 보수가 어렵다.

따라서 validaton이라는 파일을 만들어 middleware로 사용하는 것이 좋다.

express에는 validator라는 옵션이 내장되어 있고, sequelize가 깔려있다면 MySQL과도 사용할 수 있다.
또한 validator만의 표현문이 있어 이것을 이용하면 편하게 관리할 수 있다.
아래는 여러 가지 표현문이 있는 정식 문서이다.
https://sequelize.org/docs/v6/core-concepts/validations-and-constraints/

그렇게 되면 validation미들웨어 폴더에는 다음과 같은 코드가 포함된다.

const validator = require('express-validator');
const { body, validationResult } = validator;
const validate = function (req, res, next) {
  const errors = validationResult(req);
  if (errors.isEmpty()) {
    next();
  } else {
    res.status(400).json({
      errorMessage: errors.array().map((v, idx) => `${idx + 1} : ${v.msg}`),
    });
  }
};
const defaultValidate = {
	createUser: [
    body('nickname')
    .trim()
    .isLength({min:1})
    .withMessage('닉네임을 입력해주세요.')
    .is(/^[a-z][0-9])
    .withMessage('영어소문자와 숫자조합으로 닉네임을 입력해주세요.')
    validate,
    ]
}

위의 코드는 validation을 작동시키기 위한 동작으로 defaultValidate로 createUser를 실행 시 body로부터 nickname을 받아오면 유효성 검사를 실행하고 원하는 검사들을 계속 붙인다음 validate함수를 실행해 실패하면 400번 포트로 성공하면 다음으로 넘어가 다음 단계를 수행한다는 내용이다.

미들웨어는 위와 같이 작성하고 router쪽을 보게되면 굉장히 간단해지게 된다.

router('/', defaultValidate.createUser, async(req,res){
	await Post.create ....
})

그러면 유효성 검사를 거치고 생성할 수 있기때문에 router쪽의 코드는 굉장히 간편하고 어디를 가르키는지 알기 쉽게 된다.

profile
Backend Developer - Typescript, Javascript 를 공부합니다.

0개의 댓글