유효성 검증

🪐 C:on·2021년 9월 28일
0

유효성검사는 클라이언트가 body에 담아 보내는 데이터가 유효한지 확인하는 과정이다.

데이터베이스에서도 유효성검사가 이루어지지만 서버에서 유효성검사를 빨리 처리해서 비용을 줄이는 것이 좋다.

클라이언트에서도 유효성검사가 가능하지만 이것은 옵션으로 보는 면이 크다.

👉 Expresss vaildator

cli에 프로젝트 폴더라 이동한 뒤 npm i express-vaildator 를 입력해준다.

요청의 body에 express-validator의 API를 사용하면 validatoinResult(req)로 오류상태를 받을 수 있다.

이것이 빈 상태라면 오류가 없다는 것이고 그렇지 않으면 오류가 발생했다는 것이다.

body뿐만 아니라 param, 쿠키, 헤더 등에 유효성 검사를 진행할 수 있고
check를 사용하면 요청온 모든 것에 해당하는 필드가 있다면 그것의 유효성을 검사할 수도 있다.

모든 미들웨어에 핸들러가 반복 작성되면 좋지 못한 코드가 되므로 이것을 함수로 생성해서 추가해주면 깨끗해질 것이다.

import { validationResult } from "express-validator";

export const validate = (req, res, next) => {
  const errors = validationResult(req);
  if (errors.isEmpty()) return next();
  console.log(errors);
  return res.status(400).json({ message: "validation error" });
};
const router = express.Router();

const validateAuth = [
  body("email").isEmail(),
  body("name").notEmpty(),
  body("password").notEmpty().isLength({ min: 6 }),
  validate,
];

router.post("/signup", validateAuth, authController.signup);

validate 함수를 생성하고 각 미들웨어에서 유효성검증을 한 후 끝에 validate함수를 추가해주면 미들웨어에 따로 핸들러 함수를 생성하지 않아도 된다.

👉 Sanitization

유효성 검증 전에 데이터를 소독(?)해줘야 한다.

sanitization은 데이터가 일관성있게 저장될 수 있도록 정리해주는 개념으로 생각하면 된다.

예를 들어 이름에 스페이스가 들어가있는데도 create가 되는 오류를 해결해줘야 한다.

유효성 검증 전에 trim을 사용해주면 데이터의 공백을 지워준다.

https://express-validator.github.io/docs/sanitization-chain-api.html

이곳에서 express-validatorsanitization API를 확인할 수 있다.

toDate() API는 데이트 포맷으로 변경해주는 데 유용할 것 같다.

0개의 댓글