유효성 검사는 사용자가 입력한 값이 유효한 지 확인하는 것 이다.
로그인을 예시로 보면 아이디값에 문자+숫자를 입력해야 하는데
문자만 입력한 경우 , 숫자만 입력한 경우 , 아무것도 입력하지 않은 경우 등등 다양한 예외 상황이 발생한다
따라서 유효성 검사는 필수적이다.
express-validator는 express에서 유효성 검사를 도와주는 모듈이다.
유효성 검사를 개발자가 직접 구현할 수도 있지만 코드가 길어지고
놓치는 부분이 있을 수도 있기 때문에 모듈을 사용해도 좋다
사용법
전체 코드
const express = require('express');
const router = express.Router();
const conn = require('../db');
const {body, param, validationResult} = require('express-validator');
router
.route('/')
.post(
[
body('user_id')
.notEmpty()
.isInt()
.withMessage('user_id는 숫자로 입력해주세요'),
body('name')
.notEmpty()
.isString()
.withMessage('채널 이름은 문자로 입력해주세요'),
validation,
],
(req, res) => {
const err = validationResult(req);
if (!err.isEmpty()) {
return res.status(400).end();
}
const {name, user_id} = req.body;
let sql = `INSERT INTO channels (name , user_id) VALUES (?,?) `;
conn.query(
sql,
[name, user_id],
(err, result) => {
if (err) {
return res.status(400).end();
}
if (result.affectedRows > 0) {
res.status(201).json({message: `${name}님 환영합니다 ㅎㅎ`});
} else {
Notmsg(res);
}
},
);
},
)
const { body, param, validationResult } = require('express-validator');
코드 상단에 express-validator가 제공해주는 body, param , validationResult를 가져온다.
참고로 body는 필드값 , param은 url값 , validationResult는 유효성 검사 결과를 사용할 때 사용된다.
.post(
[
body('user_id')
.notEmpty()
.isInt()
.withMessage('user_id는 숫자로 입력해주세요'),
body('name')
.notEmpty()
.isString()
.withMessage('채널 이름은 문자로 입력해주세요'),
validation,
],
user_id와 name의 유효성 검사를 하며 값이 비어 있지 않아야 하고 user_id는 숫자형 name은 문자형이어야 함
const err = validationResult(req);
if (!err.isEmpty()) {
return res.status(400).end();
}
만약 오류가 있다면 400 상태코드와 함께 종료
이 과정을 들을 거친 후 query문이 실행된다.
그동안 강의를 보며 if~else문으로만 유효성 검사를 했었는데
유효성 검사를 도와주는 모듈이 있다는 점이 너무 신기하고 편리한 거 같다.
그동안 모듈들은 사용하던 것만 사용했었는데 앞으로는 찾아보면서
편리한 모듈이 있으면 사용해야겠다는 생각이 들었다.