본문 바로가기
Web/Nodejs

[Node.js] validation - 데이터 검증하기!

by coding-choonsik 2023. 5. 2.
728x90
반응형
SMALL

1. validation 

  • 유효성 검사: 입력 데이터가 유효한지 검사하는 것
  • 입력 데이터가 사용자가 원하는 형식에 맞는지, 필수 항목이 빠져 있지는 않은지 등을 검사하는 것
  • 입력 데이터가 유효하지 않으면, 사용자에게 알리고 다시 입력하도록 유도함
  • Express에서 대표적으로 express-validator라는 미들웨어를 사용하여 데이터의 유효성 검증을 할 수 있음

✅ 데이터의 유효성 검사를 실시해보자.

 

📍 두 모듈을 설치

 

 

 

📍 import하기 위해 package.json에서 "type":"module" 작성


📍  모듈  import

import express from 'express'
import { body, param, validationResult } from 'express-validator'  // body, param, validationResult 메서드
  • body: request body에 담긴 데이터를 검증하는 메소드
  • param: request parameter를 검증하는 메소드
  • validationResult: 검증 결과를 확인할 수 있는 메소드

 

📍 핸들러 정의(validate)

const app = express()
app.use(express.json())  // 미들웨어로 등록 - json으로 데이터를 받기 위해

//validationResult : request 객체를 파라미터로 받음, 이 함수를 사용하면 request 객체에서 검사할 데이터를 추출하고, 검사를 수행한 결과를 담은 객체를 반환
// 핸들러
const validate = (req, res, next) => {
    const errors = validationResult(req) 
    console.log(errors)
    if(errors.isEmpty()){  // errors가 비어있다면
        return next()
    }
    // error가 있다면
    return res.status(400).json({message: errors.array()})
}

 

📍 검증 코드 작성

⭐ 3가지  순서 중요!! (경로, validation, hadler)

app.post(
    '/users',
    // isLength():길이를 체크(최소 4글자 이하라면), withMessage(): 입력한 메시지를 띄움
    // 2개 이상의 행동을 하기위해 대괄호 [] 로 감쌈
    [
        //name 필드가 4글자 이상인지 확인하고, 그렇지 않으면 '이름은 4글자 이상으로 입력하세요' 메시지를 반환
        // trim(): string의 경우는 공백을 제거하고 길이를 재는 것이 좋음! 순서중요
        body('name').trim().isLength({min:4}).withMessage('이름은 4글자 이상으로 입력하세요'),
        
        // age 필드가 정수인지 확인하고, 그렇지 않으면 '숫자를 입력하세요' 메시지를 반환
        body('age').isInt().withMessage('숫자를 입력하세요'), 
        
        //email필드가 이메일형식인지 확인하고, 그렇지 않으면 '이메일 형식을 확인해주세요' 메시지 반환
        // normalizeEmail():확인 후  소문자로 변환함
        body('email').isEmail().withMessage('이메일 형식을 확인해주세요').normalizeEmail(),
        
        // job.name 필드가 비어있지 않은지를 검증, job 필드가 존재하지 않거나, name 필드가 비어있다면, 검증이 실패
        body('job.name').notEmpty().withMessage('job이 없거나 job객체값이 없음!'),
        
        // validate 순서 중요!!⭐
        // 위에서 정의한 규칙에 따라 요청의 body를 검사하고, 검사 결과에 따라 유효성 검사 오류가 있으면 해당 오류 메시지를 반환
        validate
    ],
    (req, res) => {
        console.log(req.body)
        res.sendStatus(201)  

    }
)

app.listen(9090)

 

📍 name을 4글자 미만, age를 문자열, job을 쓰지 않았을 때,

 📍 에러시 설정한 메시지가 msg에 잘 나온다.

 

 

 

728x90
반응형
LIST

'Web > Nodejs' 카테고리의 다른 글

[Node.js] morgan & cors  (0) 2023.04.30
[Node.js] public 폴더📂  (0) 2023.04.30
[Node.js] router 2️⃣  (0) 2023.04.30
[Node.js] router 1️⃣  (0) 2023.04.30
[Node.js] 파일 읽기 오류처리 - 동기식 & 비동기식, 서버에러 처리  (0) 2023.04.30