Validation 유효성 Sanitization
📌 유효성
데이터베이스에 접근하는 경우 네트워크 비용이 발생할 수 있다. 때문에 데이터베이스를 접근하기 전 데이터가 유효한지 검사할 필요가 있고, 또한 sanitization을 통해 일관성있는 저장을 할 수 있다.
npm i express-validator
📌 express-validator 사용
request
{
"name":"a",
"age":1,
"job": {
"name" : "DC academy",
"title" : "instructor"
},
"email" : "[email protected]"
}
express example
import express from 'express';
import { body, param, validationResult } from 'express-validator';
const app = express();
app.use(express.json());
app.post(
'/users',
body('name') //<<<--- name validation
.isLength({ min: 2, max: 10 })
.withMessage('이름은 두글자 이상이야'),
body('age') //<<<--- age validation
.notEmpty()
.isInt()
.withMessage('숫자를 입력해'),
body('job.name') //<<<--- job.name validation
.notEmpty()
.isLength({ min: 2 })
.withMessage('두글자 이상 입력해'),
(req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ message: errors.array() });
}
console.log(req.body);
res.sendStatus(201);
}
);
app.get(
'/:email',
param('email') // <<<--- param을 검사
.isEmail()
.withMessage('이메일 입력해'),
(req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ message: errors.array() });
}
res.send('good');
}
);
app.listen(8080);
📎 chaining
body('name')
.notEmpty()
.withMessage('이름을 입력해')
.isLength({min:2})
.withMessage('두글자 이상')
- 이름은 비어있지 않아야 하고,
- 비어 있다면 error메시지('이름을 입력해')
- 이름은 두글자 이상이어야 하고,
- 두글자 이상이 아니라면 error 메시지('두글자 이상')
📎 example 리팩토링
validate 함수를 작성하여 처리해준다.
const validate = (req, res, next) => {
const errors = validationResult(req);
if (errors.isEmpty()) {
return next();
}
return res.status(400).json({ message: errors.array()[0] }); //<<-- 첫번째 메시지만 보내주고 싶을 경우
};
app.post(
'/users',
body('name')
.notEmpty()
.withMessage('이름을 입력해')
.isLength({ min: 2 })
.withMessage('두글자 이상'),
body('age').notEmpty().isInt().withMessage('숫자를 입력해'),
body('job.name') //<<<--- age validation
.notEmpty()
.isLength({ min: 2 })
.withMessage('숫자를 입력해'),
validate, //<<<--- validate 함수 추가
(req, res, next) => {
console.log(req.body);
res.sendStatus(201);
}
);
app.get(
'/:email',
param('email').isEmail().withMessage('이메일 입력해'),
validate, //<<<--- validate 함수 추가
(req, res, next) => {
res.send('good');
}
);
📌 Sanitization
유효성 검사를 하는 경우 사용자에게서 받은 데이터에 대해 sanitization을 해주어야 한다.
예를 들면, 이름을 " j h o n "과 같이 띄어쓰기를 같이 쓰는 등의 유효하지 않게 작성한 경우를 처리해주어야 한다.
app.post(
'/users',
[
body('name').trim().isLength({ min: 2 }).withMessage('두글자 이상'),
//<<<--- 띄어쓰기 trim
body('age').notEmpty().isInt().withMessage('숫자를 입력해'),
body('email').isEmail().withMessage('email 입력하세요')
.normalizeEmail(), //<<--- 이메일 대문자를 소문자로 변경
],
(req, res, next) => {
console.log(req.body);
res.sendStatus(201);
}
);
Contract Testing : Client-Server
Author And Source
이 문제에 관하여(Validation 유효성 Sanitization), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ellie12/Validation-유효성-Sanitization저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)