우선 express-validator를 설치하기 위해 터미널에서 npm install --save express-validator
명령어를 통해 라이브러리를 설치해준다.
routes파일에는 여러가지가 메서드를 이용한 api가 있지만 입력을 검증 받는 절차이기에 post, patch 등 의 입력값을 받을 수 있는 api만 검증해주면 된다.
router.post("/", 컨트롤러.함수)
우선 express-validator를 가져오는데 구조분해로 check 메서드만 가져와준다.
const {check} = require("express-validator")
이후 post를 요청한 api에서 check를 이용해서 입력폼을 검증해준다.
// 검증 전
router.post("/", 컨트롤러.함수)
// 검증 로직 적용
router.post("/", check("체크할 객체의 키값").not().isEmpty(), 컨트롤러.함수)
check의 인자값으로 객체로 넘겨주는 값들 중 내가 검증하고 싶은 객체값의 키값을 넣어주고 뒤의 메소드를 이용해서 검증을 해준다.
예시) 입력값 중 title이라는 부분이 비어있지 않은지 검증
router.post("/", check('title').not().isEmpty(), 컨트롤러.함수)
영어 문장이라고 생각하면 쉽다.
title not is Empty
위의 작업만 해두었으면 작동이 되지 않는다.
컨트롤러 부분 즉 api를 구성하는 함수부분에서 트리거 할 수 있는 부분을 찾아내어 적용을 시켜줘야 한다.
const postTest = (req, res, next) => {
const {title} = req.body
const createData = {
title
}
DUMMY_DATA.push(createData)
res.status(201).json({createData})
}
이렇게 간단하게 데이터를 만들 수 있는 함수가 있다고 가정해보고 우선 validationResult
를 가져온다.
const { validationResult} = require("express-validator")
이후 이 메서드를 이용해서 트리거를 시켜주면 된다.
const { validationResult} = require("express-validator")
const postTest = (req, res, next) => {
// 입력 검증 트리거 추가
const error = validationResult(req)
if(!error.isEmpty()){
throw new HttpError("입력값 오류", 422)
}
//
const {title} = req.body
const createData = {
title
}
DUMMY_DATA.push(createData)
res.status(201).json({createData})
}
다음과 같이 추가해주면 된다.
이때 HttpError는 이전에 만들었던 에러 모듈이다.
그렇다면 다중으로 입력값을 검증하는 방법은 없을까?
routes파일에서 적용시켜주면 된다.
// 단일 오류
router.post("/", check("체크할 객체의 키값").not().isEmpty(), 컨트롤러.함수)
// 다중 오류
router.post("/", [check("체크할 객체의 키값").not().isEmpty(), check("체크할 객체의 키키값").isLength({min:5})], 컨트롤러.함수)
비어있는지 체크와 글자 수 제한을 걸어서 오류를 검증할 수 있다.
validator를 체크하는 부분을 배열로 만들어서 보내주면 다양한 양식을 검증할 수 있다.