express-validator을 이용한 유효성 검사

ssomae·2024년 9월 24일

DevCourse

목록 보기
20/29
post-thumbnail

유효성 검사

사용자가 입력한 값에 대한 유효성을 검사해보자

  • userId : 값이 있어야한다, 숫자여야 한다.
  • 사람 name : 숫자 X, 문자열, 2자 이상 …

외부 모듈 express-validator 를 사용해보자

req 값에 대한 유효성 검사를 편하게 해준다.

유효성 검사를 할 곳에다가 해당 코드를 적어주자

const { body, validationResult } = require('express-validator')

채널 개별 생성 유효성 체크

.post(
        body('userId').notEmpty().isInt().withMessage('userId는 숫자여야 합니다.')
        , (req, res) => {
            const err = validationResult(req);
            if (!err.isEmpty()) {
                console.log(err.array());
            }
            const { name, userId } = req.body;
            if (name) {
                let sql = `INSERT INTO channels (name, user_id) VALUES (?, ?)`;
                let values = [name, userId];
                conn.query(sql, values,
                    function (err, results) {
                        res.status(201).json(results);
                    }
                )
            } else {
                res.status(400).json({
                    message : '요청값을 제대로 보내주세요'
                })
            }
    }) //채널 개별 생성
body('userId').notEmpty().isInt().withMessage('userId는 숫자여야 합니다.')
        , (req, res) => {
            const err = validationResult(req);
            if (!err.isEmpty()) {
                console.log(err.array());
            }
  • 콜백함수를 호출하기 전에 유효성 검사 먼저하고, 공백인지, 숫자인지 체크한후 오류가 있으면 에러 메세지를 출력한다.
  • name 에 대해서도 유효성을 체크하고 코드를 개선해보자
.post(
        [body('userId').notEmpty().isInt().withMessage('userId는 숫자여야 합니다.'),
         body('name').notEmpty().isString().withMessage('name은 문자여야 합니다')]
        , (req, res) => {
            const err = validationResult(req);
            if (!err.isEmpty()) {
                return res.status(400).json(err.array())
            }
            const { name, userId } = req.body;
            let sql = `INSERT INTO channels (name, user_id) VALUES (?, ?)`;
            let values = [name, userId];
            conn.query(sql, values,
                function (err, results) {
                    res.status(201).json(results);
                }
            )
            
    }) //채널 개별 생성
  • SQL문에 대한 유효성 체크도 추가하자
conn.query(sql, values,
                function (err, results) {
                    if (err) {
                        console.log(err);
                        return res.status(400).end();
                    }
                    res.status(201).json(results);
                }
            )

채널 전체 조회

.get(
        body('userId').notEmpty().isInt().withMessage('userId는 숫자여야 합니다.')
        , (req, res) => {//채널 전체 조회
            const err = validationResult(req);
            if (!err.isEmpty()) {
                return res.status(400).json(err.array())
            }

            const { userId } = req.body;
            let sql = `SELECT * FROM channels WHERE user_id = ?`
            conn.query(sql, userId,
                function (err, results) {
                    if (results.length)
                        res.status(200).json(results)
                    else
                        notFoundChannel(res);
                }
            )
    })

채널 개별 조회

.get(
        param('id').notEmpty().withMessage('채널 id 필요')
        , (req, res) => {
            const err = validationResult(req);
            if (!err.isEmpty()) {
                return res.status(400).json(err.array())
            }

            let { id } = req.params;
            id = parseInt(id);
            let sql = `SELECT * FROM channels WHERE id = ?`
            conn.query(sql, id,
                function (err, results) {
                    if (err) {
                        console.log(err);
                        return res.status(400).end();
                    }
                    
                    if (results.length)
                        res.status(200).json(results)
                    else
                        notFoundChannel(res);
                }
            )
    }) //채널 개별 조회

채널 업데이트

.put(
        [param('id').notEmpty().withMessage('채널 id 필요'),
         body('name').notEmpty().isString().withMessage('채널명 오류')]
        , (req, res) => {
            const err = validationResult(req);
            if (!err.isEmpty()) {
                return res.status(400).json(err.array())
            }

            let { id } = req.params;
            id = parseInt(id);
            
            let { name } = req.body;
            let sql = `UPDATE channels SET name = ?
                        WHERE id = ?`
            let values = [name, id];

            conn.query(sql, values,
                function (err, results) {
                    if (err) {
                        console.log(err);
                        return res.status(400).end();
                    }
                    
                    if (results.affectedRows === 0) {
                        return res.status(400).end();
                    } else {
                        res.status(200).json(results)   
                    }
                }
            )
    }) //채널 개별 수정

채널 개별 삭제

.delete(
        param('id').notEmpty().withMessage('채널 id 필요')
        , (req, res) => {
            const err = validationResult(req);
            if (!err.isEmpty()) {
                return res.status(400).json(err.array())
            }

            let { id } = req.params;
            id = parseInt(id);
            let sql = `DELETE FROM channels WHERE id = ?`
            conn.query(sql, id,
                function (err, results) {
                    if (err) {
                        console.log(err);
                        return res.status(400).end();
                    }
                    
                    if (results.affectedRows === 0) {
                        return res.status(400).end();
                    } else {
                        res.status(200).json(results)   
                    }
                }
            )
        
    }) //채널 개별 삭제

반복되는 코드들 모듈화 시키기

const err = validationResult(req);
            if (!err.isEmpty()) {
                return res.status(400).json(err.array())
            }
  • 해당 구문이 여러번 반복됨
const validate = (req,res) => {
    const err = validationResult(req);
    if (!err.isEmpty()) {
        return res.status(400).json(err.array())
    }
}
  • 이렇게 변수에다가 함수를 할당하여 모듈화 시켜볼까?
profile
성장해나갈 개발자

0개의 댓글