본문 바로가기
백엔드/NodeJs

[NodeJs] Express 서버에서 손쉽게 유효성 검사하기 express-validator

by jinwanseo 2021. 8. 3.
728x90

[NodeJs / Express] 서버에서 손쉽게 데이터 유효성 검사하기

express-validator

 

 

⭐️  서버에 전송되는 데이터의 유효성 검사는 빠를 수록 좋다.

왜냐하면 유효하지 않은 데이터를 굳이 가공하는데 

비용을 낭비할 필요가 없기 때문이다

 

 

⭐️  데이터 유효성 검사의 방법은 여러가지가 있지만

간단한 예로 회원가입시 회원가입 정보가 서버에 전달이 되었을때

아래의 데이터 기준에 부합하는 유효성 검사를 직접 구현 한 것과

express-validator를 사용한 두가지 예제를 통해 구현의 복잡성을 비교하기로 한다.

 

 

⭐️  데이터 유효성 기준

아이디의 공백여부 및 최소 글자수 (3글자 이상) 최대 글자수 (20글자 미만)을

기준으로 유효성 검사를 하여 유효성 검사 기준에 부합할시 가입 성공 메시지 응답,

유효성 검사 기준에 해당 없을시 해당 경고 메시지를 json을 통해 응답

 

 

🌈  유효성 검사 직접 구현 코드

NodeJs 프레임 워크 : express

import express from 'express';

const app = express();
app.use(express.json());

app.post('/users',(req,res,next)=>{
    if(!req.body.id){
        return res.sendStatus(404);
    }else {
        //아이디 공백 제거
        const userId = req.body.id.trim();
        //아이디 3글자 이하
        if(userId.length <= 3){
            return res.status(400).json({message : "아이디는 3글자 이상"});
        } 
        //아이디 20글자 초과
        else if (userId.length > 20){
            return res.status(400).json({message : "아이디는 20글자 미만"});
        } 
        //정상
        else {
            return res.sendStatus(200);
        }
    }
});

 

🌈  유효성 검사 모듈 사용 코드

NodeJs 프레임 워크 : express

사용 모듈 : express-validator

 

import express from 'express';
import {body, validationResult} from 'express-validator';

const app = express();
app.use(express.json());

app.post('/users',body('id').trim().isLength({min:3,max:20}).withMessage('아이디 3글자 이상 20글자 미만'),(req,res,next)=>{
   const error = validationResult(req);
   if(!error.isEmpty()){
       res.status(400).json(error);
   } else {
       res.sendStatus(200);
   }
});

 

위와같이 공백 및 글자수 뿐만 아니라

대소문자 여부 숫자 문자열 여부 이메일 주소 여부 등

체이닝을 통해 얼마든지 추가적인 유효성 검사를

간단하게 구현할수 있다.

 

🌈  유효성 검사 모듈 사용 코드2

NodeJs 프레임 워크 : express

사용 모듈 : express-validator

 

import express from 'express';
import {body, validationResult} from 'express-validator';

const app = express();
app.use(express.json());

const validationFunc = (req,res,next)=>{
    const error = validationResult(req);
    if(!error.isEmpty()) return res.status(400).json(error);
    next();
}

app.post('/users',
    [
        body('email').isEmail().isLength({max:20}).withMessage('이메일 정보 확인'),
        body('password').isLength({min:5}).withMessage("5글자 이상"),
        validationFunc
    ],
    (req,res,next)=>{
   res.send(req.body);
});

app.listen(8080,()=>console.log('http://localhost:8080'));

 

 

위와같이 body 내 여러 데이터 유효성 검사를 

미들 웨어 추가만으로 손쉽게 구현이 가능하다

 

728x90

댓글