api 서버를 개발하는 도중 미들웨어에서 파라미터를 검증하면 좋을 것 같아 찾아보다가 express-validator
라는 라이브러리를 찾았다.
해당 라이브러리는 Express 애플리케이션에서 HTTP 요청을 처리할 때 바디, 쿼리, 헤더, 경로 등 포함된 데이터 유효성 검사를 쉽게할 수 있게 해주는 미들웨어 라이브러리로 유효하지 않은 데이터가 들어올 때 에러 메세지를 반환할 수 있다.
유효성 검사
isEmail(): 이메일 형식 검사
isInt(): 정수형 검사
isLength(): 길이 검사
isAlpha(): 알파벳만 검사
isNumeric(): 숫자만 검사
isAlphanumeric(): 알파벳과 숫자만 검사
isIn(): 특정 값이 목록에 포함되어 있는지 검사
- 예시
body('username').isLength({ min: 3, max: 20 }).withMessage('Username must be between 3 and 20 characters')
가공
trim(): 앞뒤 공백 제거
escape(): HTML 특수 문자를 이스케이프 처리
toLowerCase(): 소문자로 변환
toInt(): 문자열을 정수로 변환
- 예시
body('email').normalizeEmail() // 이메일 주소의 대소문자를 정규화
다른 좋은 방안도 많겠지만 일단 객체로 관리해서 미들웨어로 가져다 쓰는 방식을 생각해봤다.
나중에도 활용을 할 지 보고 이불킥을 할 지는 모르지만 일단 써보자.
import { body, validationResult } from 'express-validator';
const errHandler = (req, res, next) => {
const err = validationResult(req);
if (!err.isEmpty()) {
return res.status(400).json({
statusCode: 400,
message: 'Parameter validation failed. You can find the reason at "errors"',
errors: err.array(),
});
}
next();
};
export const paramsValidator = {
auth: {
oAuthLogin: [body('code').notEmpty().withMessage('Not found parameter "code"'), errHandler],
},
problems: {
createProblem: [
body('sector').notEmpty().withMessage('Not found parameter "sector"'),
body('difficulty').notEmpty().withMessage('Not found parameter "difficulty"'),
body('title').notEmpty().withMessage('Not found parameter "title"'),
body('description').notEmpty().withMessage('Not found parameter "description"'),
body('answer').notEmpty().withMessage('Not found parameter "answer"'),
body('hint').notEmpty().withMessage('Not found parameter "hint"'),
body('explanation').notEmpty().withMessage('Not found parameter "explanation"'),
body('reference').notEmpty().withMessage('Not found parameter "reference"'),
errHandler,
],
},
};
router.post('/git/token', paramsValidator.auth.oAuthLogin, authController.oAuthLogin);