본문 바로가기

4. Node.js | React.js

5/2(화) IT K-DT(43일차) / 27.validation~28.fetch

 

 

27. validation 

 

27-1. Validation 개요

유효성 검사. 데이터나 값을 검증하여 올바른 형식이나 범위에 있는지 확인하는 과정.

웹 개발에서는 대부분 클라이언트에서 사용자가 입력한 데이터의 유효성 검사를 수행함.

예를 들어, 회원 가입 시 입력한 이메일 주소, 비밀번호 등의 정보가 올바른 형식에 맞게 입력되었는지

검사하는 것이 유효성 검사임.

이를 통해 올바르지 않은 데이터를 미리 걸러내어 시스템에 문제가 생기지 않도록 함.

Express.js에서는 'express-validator 모듈'을 사용하여 서버 측에서 유효성 검사를 수행할 수 있음.

이 모듈을 사용하면, 다양한 유효성 검사 규칙을 설정하고, 해당 규칙에 따라 입력 데이터를 검증할 수 있음.

예를 들어, isEmail() 메서드는 입력된 값이 이메일 주소 형식에 맞는지를 검사하고, 

isInt() 메서드는 입력된 값이 정수인지를 검사함.

이렇게 검증된 데이터는 안전하게 처리되어 시스템에 문제가 발생하지 않도록 함.

따라서, Validation(유효성 검사)은 안전하고 신뢰성 있는 웹 서비스를 제공하기 위해 필수적인 과정입니다.

 

27-2. Validation 시작하기 전

validation과 관련된 모듈의 설치

npm i express-validator

npm i express

을 입력.

 


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

const app = express();
app.use(express.json());                     // express.json()을 데이터로 갖기 위해 미들웨어로 등록함

 // 만약 2개 이상을 작성하려는 겨우, list를 이용(대괄호) → 이 때 사용하는 validate 매개변수 설정
const validate = (req, res, next) => {
    const errors = validationResult(req);
    if (errors.isEmpty()){
        return next();
    }
    return res.status(400).json({message: errors.array()});
}

 ( 1 )   // 만약 post에서 2개 이상을 보내려는 경우, list를 이용 (대괄호)
app.post( ' / ',                  // users로 data를 post하면(보내면), body부터의 처리를 진행.
    [ 
        body('name').trim().isLength({min:4}).withMessage('이름은 4글자 이상으로 입력하세요.'), 
               // trim(): 공백을 제거하고 글자의 수를 셈.
        body('age').isInt().withMessage('숫자를 입력하세요'),

( 2 )
        body('email').isEmail().withMessage('이메일 형식을 확인해주세요').normalizeEmail(), 
              // normalizeEmail(): 형식 check 후 이메일의 대문자와 소문자의 혼합을 모두 소문자로 통일해줌.

( 3 )

        body('job.name').notEmpty(), // job의 name이 있는지의 유무를 확인함.
        validate
    ],   

    (req,res)=>{
        console.log(req.body);
        res.sendStatus(201);
    })
);


app.listen(8080);

 

( 1 )

Postman 프로그램을 작동해서 Body > Raw에 'email'의 내용을 아래와 같이 기재한 후,

Save + Send 시 정상적으로 작동되는지의 여부를 확인.

조건에 부합하여 POST가 정상적으로 작동 시 Created 생성.

 

 

( 2 )
Email의 형식을 잘못 맞추어서 Send 시, "이메일 형식을 확인해주세요" 출력.

 

( 3 )

만약 notEmpty()조건이랑 다르게 job-name의 값을 누락했을 시, "Invalid value" 출력.

 

POST 정상적으로 작동 시 Created 생성.

 

예) get 메서드를 이용하여 param 메서드를 통해 email값을 추출하여 유효성검사를 실행하는 예제.


app.get(            // Express.js에서 GET 요청을 처리하기 위한 메서드.
    '/:email',                  //  URL 경로의 일부분을 변수로 받을 수 있도록 함.
    [                              // /user1@example.com와 같이 요청을 보내면, req.params.email에 "user1@example.com"가 할당됨.
        param('email').isEmail().withMessage('이메일 형식을 확인하세요.'),
                                              // express-validator 미들웨어를 사용하여 요청 파라미터인 email이 이메일 형식에 맞는지 검증.

        validate   // 유효성 검사를 수행함. 결과에 따라 next() 또는 res.status() 메서드로 에러 메시지를 반환.
    ],
    (req,res,next)=> {            // 핸들러 삽입.
        res.sendStatus(200);       // 요청이 성공했음을 나타내는 200 상태 코드를 반환.
    }
)

app.listen(8080);

 

Email의 형식(@, / 가 포함되지 않음) 을 잘못 맞추어 Send 시, "이메일 형식을 확인해주세요" Error 출력.

 

GET 정상적으로 작동 시 Created 생성.

 

28. fetch

네트워크요청 송신/응답 수신 기능을 수행하는 메서드로, Promise를 반환하며 비동기적으로 작동함.

기본적으로 HTTP 요청을 보내고 응답을 받을 수 있음.

 

 fetch ( '요청을보낼URL' , '[옵션]' ) 


  fetch ( '요청을보낼URL' , '[옵션]' )                    // 응답 데이터 처리
      .then(response => response.json())
      .then(data => {
      })
      .catch(error => {                                            // 에러 처리
      });

 

예) 특정 홈페이지로 GET 요청을 보내고, option을 포함한 응답 데이터를 JSON 형식으로 처리.


const option = {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ username: 'john', password: 'secret' })
};

fetch('https://api.example.com/data', option)
  .then(response => response.json())
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.log(error);
  });