🎯 express-validator 라이브러리λ₯Ό 톡해 μ‚¬μš©μž μš”μ²­μ˜ μœ νš¨μ„±μ„ κ²€μ¦ν•©λ‹ˆλ‹€.


πŸ“™ Today I Learned

μœ νš¨μ„± 검사 (Validation)

μœ νš¨μ„± κ²€μ‚¬λž€ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 값이 νƒ€λ‹Ήν•œμ§€ ν™•μΈν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

express-validator

μœ νš¨μ„± 검사λ₯Ό μœ„ν•΄ express-validator νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•©λ‹ˆλ‹€.

$ npm install express-validator

express-validator 속성

  • req.body: HTTP μš”μ²­μ˜ 본문을 μ˜λ―Έν•˜λ©°, 객체, λ°°μ—΄ λ“±μ˜ 데이터λ₯Ό 포함할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • req.params: URL κ²½λ‘œμ—μ„œ μΆ”μΆœλœ λ§€κ°œλ³€μˆ˜λ₯Ό ν¬ν•¨ν•˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€.

  • req.query: μš”μ²­ URL의 쿼리 λ¬Έμžμ—΄μ—μ„œ μ „λ‹¬λœ 데이터λ₯Ό ν¬ν•¨ν•˜λŠ” κ°μ²΄μž…λ‹ˆλ‹€.


예제 μ½”λ“œ

기본적인 μœ νš¨μ„± 검사 적용 μ˜ˆμ‹œ

const express = require('express');
const { query, validationResult } = require('express-validator');
const app = express();

app.use(express.json());
app.get('/hello', query('person').notEmpty(), (req, res) => {
  const result = validationResult(req);
  if (result.isEmpty()) {
    return res.send(`Hello, ${req.query.person}!`);
  }

  res.send({ errors: result.array() });
});

app.listen(3000);

μœ νš¨μ„± 검사 μ‹€νŒ¨ μ‹œ 좜λ ₯λ˜λŠ” μ—λŸ¬ μ˜ˆμ‹œ

{
  "errors": [
    {
      "location": "query",
      "msg": "Invalid value",
      "path": "person",
      "type": "field"
    }
  ]
}



μ½”λ“œ μ‹€μŠ΅

POST μš”μ²­μ—μ„œ express-validator μ‚¬μš©

const express = require('express');
const router = express.Router();
const conn = require('../mariadb');
const { body, param, validationResult } = require('express-validator');

// JSON νŒŒμ‹± 미듀웨어 ✨router.use()κ°€ μ•„λ‹ˆλΌ express.json()이 λ―Έλ“€μ›¨μ–΄βœ¨
router.use(express.json());

// κ²°κ³Ό 확인 및 μ—λŸ¬ 검증 미듀웨어 
const validate = (req, res, next) => {
  const err = validationResult(req);

  if (!err.isEmpty()) {
    return res.status(400).json(err.array());
  } else {
    return next();
  }
};

router
  .route('/')
  .post(
    [
      body('userId').notEmpty().isInt().withMessage('숫자 μž…λ ₯ ν•„μš”'), // μœ νš¨μ„± 검증 미듀웨어
      body('name').notEmpty().isString().withMessage('문자 μž…λ ₯ ν•„μš”'),
      validate,
    ],
    (req, res, next) => {
      const { name, userId } = req.body;

      const sql = 'INSERT INTO authors (name, user_id) VALUES(?, ?)';
      const values = [name, userId];
      conn.query(sql, values, (err, results) => {
        if (err) {
          return res.status(400).end();
        }
        res.status(201).json(results);
      });
    }
  )
  • body('userId').notEmpty().isInt() β†’ userIdκ°€ 빈 값이 μ•„λ‹ˆλ©΄μ„œ μ •μˆ˜μΈμ§€ ν™•μΈν•©λ‹ˆλ‹€.

  • body('name').notEmpty().isString() β†’ name이 빈 값이 μ•„λ‹ˆλ©΄μ„œ λ¬Έμžμ—΄μΈμ§€ ν™•μΈν•©λ‹ˆλ‹€.

  • validate 미듀웨어λ₯Ό μ‚¬μš©ν•΄ μœ νš¨μ„± 검사 κ²°κ³Όλ₯Ό ν™•μΈν•˜κ³ , μ‹€νŒ¨ μ‹œ 였λ₯˜ λ©”μ‹œμ§€λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

πŸ€” 미듀웨어(Middleware)λž€?

  • μš”μ²­(req)κ³Ό 응닡(res) μ‚¬μ΄μ—μ„œ μ‹€ν–‰λ˜λŠ” ν•¨μˆ˜μž…λ‹ˆλ‹€.
  • λ‹€μŒ λ―Έλ“€μ›¨μ–΄λ‘œ λ„˜μ–΄κ°€κΈ° μœ„ν•΄μ„œλŠ” next()λ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • next()λ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠμœΌλ©΄ μš”μ²­μ΄ λ©ˆμΆ°λ²„λ¦¬κ³ , λ‹€μŒ λ‹¨κ³„λ‘œ μ§„ν–‰λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • 경둜 인자λ₯Ό λ„£μ§€ μ•ŠμœΌλ©΄ λͺ¨λ“  μš”μ²­μ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

πŸ‘‰ express 미듀웨어 총정리 μ‚¬μ΄νŠΈ




✏️ ν•œ 쀄 회고

express-validator 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ μœ νš¨μ„± 검사λ₯Ό μ μš©μ‹œν‚€λ©΄μ„œ μ—λŸ¬μ˜ λͺ¨λ“  κ²½μš°μ— λŒ€ν•΄ 핸듀링을 ν•œ 덕에 μ½”λ“œκ°€ 견고해진 λŠλ‚Œμ΄ λ“€μ—ˆμŠ΅λ‹ˆλ‹€.

profile
🌱개발 기둝μž₯

0개의 λŒ“κΈ€