[Express] express-validator로 입력 검증하기

적자생존·2023년 1월 4일
0

Node

목록 보기
9/17

1. 라이브러리 설치

우선 express-validator를 설치하기 위해 터미널에서 npm install --save express-validator명령어를 통해 라이브러리를 설치해준다.

2. routes파일 수정

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

3. 컨트롤러 파일 수정

위의 작업만 해두었으면 작동이 되지 않는다.

컨트롤러 부분 즉 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는 이전에 만들었던 에러 모듈이다.

4. 다중 오류 체크하기

그렇다면 다중으로 입력값을 검증하는 방법은 없을까?

routes파일에서 적용시켜주면 된다.

// 단일 오류
router.post("/", check("체크할 객체의 키값").not().isEmpty(), 컨트롤러.함수)

// 다중 오류
router.post("/", [check("체크할 객체의 키값").not().isEmpty(), check("체크할 객체의 키키값").isLength({min:5})], 컨트롤러.함수)

비어있는지 체크와 글자 수 제한을 걸어서 오류를 검증할 수 있다.

validator를 체크하는 부분을 배열로 만들어서 보내주면 다양한 양식을 검증할 수 있다.

profile
적는 자만이 생존한다.

0개의 댓글