[express] 유효성 검사를 위한 express-validator 사용하기
서론
Spring-boot를 공부하던 중 Bean Validation에서 제공하는 annotation을 사용해보니 코드가 너무 간결해지고 관리가 편하다는 것을 느꼈다. 그래서 node express에서도 요청 값을 validation 할 수 있는 라이브러리를 찾다가 알게 된 express-validator에 대한 설명글을 쓰고자 한다.
유효성 검사를 좀 더 간편하게!
const { body, validationResult } = require('express-validator');
app.post(
'/user',
body('username').isEmail(),
body('password').isLength({ min: 5 }),
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
User.create({
username: req.body.username,
password: req.body.password,
}).then(user => res.json(user));
}
);
위 코드는 Getting started에서 나오는 예제이다. 간단하게 Router에서 유효성을 검사할 수 있다. 요청 핸들러 전에 유효성을 추가한 뒤 요청 핸들러에서 validationResult 객체를 통해 에러를 확인하고 에러를 처리해주는 형태로 사용한다. 하지만 모든 router에 유효성 검사 코드를 추가하고 요청 핸들러에 validationResult 객체를 이용한 에러코드 처리 부분까지 다 추가하기에는 하드코딩의 느낌이 들기에 에러 처리 부분을 미들웨어로 빼도록 구현해보고자 한다.
미들웨어로 구현
/* ~/middleware/validator.js */
const { validationResult } = require("express-validator");
exports.validatorErrorChecker = (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
next();
}
const { body } = require('express-validator');
const { validatorErrorChecker } = require('../middleware/validator');
router.post('/login', [
body('email').exists().isEmail(),
body('password').exists().isLength({ min: 10, max: 20 }),
body('type').exists().isIn(['user', 'admin']),
validatorErrorCallback
], (req, res) => {
const email = req.body.email;
const password = req.body.password;
const type = req.body.type;
res.json({
email,
password,
type
});
});
구현한 미들웨어를 불러와 유효성 검증 마지막에 넣어준다. 만약 에러가 있다면 분기를 가로채 400 에러를 반환하고 에러가 없다면 next()가 호출돼 정상적인 요청 핸들링이 가능하다.
테스트
'Node.js > express' 카테고리의 다른 글
[node.js] localhost https 적용 (SSL) (0) | 2022.05.06 |
---|---|
[express] Redis 개념 및 nodejs 캐시 구현 예제 (0) | 2021.12.19 |
[node.js] DI(의존성 주입) 구현하기 (1) | 2021.08.20 |
[node.js] 견고한 node.js 프로젝트 설계하기 (번역) (0) | 2021.08.09 |
[node.js] express 회원가입 인증 메일 발송 API (1) | 2021.06.01 |
댓글
이 글 공유하기
다른 글
-
[express] Redis 개념 및 nodejs 캐시 구현 예제
[express] Redis 개념 및 nodejs 캐시 구현 예제
2021.12.19 -
[node.js] DI(의존성 주입) 구현하기
[node.js] DI(의존성 주입) 구현하기
2021.08.20 -
[node.js] 견고한 node.js 프로젝트 설계하기 (번역)
[node.js] 견고한 node.js 프로젝트 설계하기 (번역)
2021.08.09 -
[node.js] express 회원가입 인증 메일 발송 API
[node.js] express 회원가입 인증 메일 발송 API
2021.06.01