๐ก express-validator๋ 'validator.js'์์ ์ ๊ณตํ๋ ๋ค์ํ ์ ํจ์ฑ ๊ฒ์ฌ๊ธฐ์ ์ ์ ๊ธฐ๋ฅผ ๊ฐ์ธ๋ Express.js ๋ฏธ๋ค์จ์ด ์ด๋ค.
- ์ ๋ ฅ ๋ฐ์ดํฐ์ ์ ํจ์ฑ ๊ฒ์ฌ (validator)
- ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ํน์ ํ์์ ๋ง๊ฒ ๋ณํํ๊ฑฐ๋ ์ ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ (sanitizer) (์์)๋ฌธ์ => ์ซ์ ๋ณํ
npm install express-validator
import express from 'express'
import { query, validationResult } from 'express-validator';
app.get('/', query('person').notEmpty(), (req, res) => {
const err = validationResult(req);
if (err.isEmpty()) {
// ์ฑ๊ณต ์ ๋ก์ง
return res.send(`Hello, ${req.query.person}!`);
}
// ์คํจ ์ ๋ก์ง
res.send({ errors: err.array() });
});
{
"errors": [
{
"type": "field",
"msg": "Invalid value",
"path": "person",
"location": "query"
}
]
}
๋ฐฐ์ด๋ก ๋ณด๋ผ ์ ์๋ค.
์ถ๊ฐ์ ์ผ๋ก msg๋ ์ง์ ํ ์ ์๋ค.
[
body("userId")
.notEmpty().withMessage("์์ฒญ๊ฐ์ ์ ๋๋ก ๋ณด๋ด์ฃผ์ธ์")
.isInt().withMessage("์ซ์๋ฅผ ๋ณด๋ด์ฃผ์ธ์"),
body("title")
.notEmpty()
.isString().withMessage("๋ฌธ์๋ฅผ ๋ณด๋ด์ฃผ์ธ์"),
]
์
๋ ฅ๊ฐ์ HTML๋ฅผ ์ฝ์
ํ ์ ์๋ ๋ฌธ์ ๊ฐ ์๋ค.
์ด๊ฒ์ XSS ์ทจ์ฝ์ ๊ณต๊ฒฉ์ด๋ผ๊ณ ํ๋๋ฐ http://localhost:3000/hello?person=<b>John</b>์ผ๋ก ์ด๋ํ๋ฉด "Hello, John!" ์ด๋ผ๊ณ ์ถ๋ ฅ์ด ๋๋ค.
๋ง์ฝ ํด์ปค๊ฐ John์ ์ฝ์
ํ๋ ๋์ ์ค์ ์
์ฑ์ฝ๋๋ฅผ ์ฝ์
ํ๋ฉด ๋ณด์์ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๋ escape() ํจ์๊ฐ ์๋ค.
import express from 'express'
import { query, validationResult } from 'express-validator';
app.get('/', query('person').notEmpty().escape(), (req, res) => {
const err = validationResult(req);
if (err.isEmpty()) {
// ์ฑ๊ณต ์ ๋ก์ง
return res.send(`Hello, ${req.query.person}!`);
}
// ์คํจ ์ ๋ก์ง
res.send({ errors: err.array() });
});
๋ณ๊ฒฝ ํ Hello, <b>John</b>! ์ด ํ์๋๋ค.
// ๋ฏธ๋ค์จ์ด
const validate = (req, res, next) => {
const err = validationResult(req);
if (!err.isEmpty()) {
return res.send({ errors: err.array() });
}
// ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ํต๊ณผํ์ ๊ฒฝ์ฐ ๋ค์ ๋ฏธ๋ค์จ์ด๋ก ์ ์ด๋ฅผ ๋๊น
return next();
};
app.get('/', [query('person').notEmpty().escape(), validate], (req, res) => {
console.log(req.query);
return res.send(`Hello, ${req.query.person}!`);
});
์ฐธ๊ณ ๋ฌธ์
https://express-validator.github.io/docs/guides/getting-started