node.JS로 rest API를 제작하면서 공부하던 중 validation 라이브러리 중 Joi가 괜찮아 보여서 사용해보았습니다.
해당 프로젝트로 들어가서 Joi를 설치해줍니다. package.json파일이 있는 곳에서 설치해주세요 저는 이 프로젝트에서만 사용할 테니 글로벌 옵션은 제거했습니다.
npm install joi
사용법은 간단합니다.
// ../API/validation/user.js
const Joi = require('joi');
const user_validation = {
user_singup : async (req, res, next) =>{
console.log("req :", req.query);
const body = req.query;
const schema = Joi.object().keys({
name: Joi.string().min(1).max(20).required(),
password: Joi.string().min(1).max(20).required(),
email: Joi.string().email().required(),
});
try { // 검사시작
await schema.validateAsync(body);
} catch (e) { // 유효성 검사 에러
return res.status(400).json({ code: 400, message: e.message });
}
next();
}
};
module.exports = user_validation;
저는 로직에서 validation와 비지니스 로직을 분리하였습니다.
//index.js
const express = require('express'),
router = express.Router();
const user_validate = require('../API/validation/user'),
user = require('../API/controllers/user.controller'),
//회원가입
router.post('/signup', user_validate.user_singup, user.signup);
module.exports = router;
값을 받아오면 값에 대한 validation을 합니다. 만약 정상적인 값이라면 next()를 통해 user.singup으로 넘어갑니다. user.singup에서는 변수 컨트롤을 안 해줘도 되어 나중에 테스트 코드를 작성할 때 조금 테스트하기 편할 것이라고 생각합니다.
index에서는 라우터만 연결해주었습니다. 여기에 비지니스 로직을 들어가는 방법은 옳지 않은 방법이라 생각했습니다.
https://joi.dev/api/?v=17.4.2
이곳은 joi API 공식 문서입니다. 자세한 사용방법이 나와있으니 참고해주시면 좋을듯합니다.
제가 사용하면서 삽질했던 내용을 정리해보려고 합니다. 저는 rest api를 제작하면서 값을 검증할 때 관계 연산이 필요했습니다. 예를 들어 업데이트해야 할 값을 받아오는데 3개 중에 하나만 받아야 합니다. 이때 Joi로 validation 하면 간결해집니다.
const body = req.query;
const schema = Joi.object().keys({
name: Joi.string().min(1).max(20),
phone: Joi.string().min(1).max(20),
id: Joi.string().min(1).max(20),
})
.xor('name', 'phone', 'id');
try { // 검사시작
await schema.validateAsync(body);
} catch (e) { // 유효성 검사 에러
return res.status(400).json({ code: 400, message: e.message })
}
이렇게 사용한다면 값을 xor로 관계 연산으로 받아올 수 있습니다. 짝짝짝~ 저는 변수 뒤에. required()를 줘가지고 xor이 안되었습니다... 엄청난 삽질을... ㅠㅠ required()는 필수로 값을 받아와야 하는 옵션입니다.! 이런 식으로 값들을 쉽게 핸들링할 수 있습니다. 이제는
if(name != undefined || name.length == 0 ...)
이렇게 귀찮게 안 하고도 joi를 통해 쉽게 validation 합시다. 끝!!
'혼자 공부하는 것들 > node.js' 카테고리의 다른 글
[node.js & express.js] 깔끔하게 Routing을 해보자! (0) | 2021.09.08 |
---|---|
node.js 파일목록 뽑아내기 (0) | 2020.11.22 |
node.js Not found 예외처리 추가 (0) | 2020.11.21 |
node.js 파일 읽어오기 [CRUD중 Read 실습 ] (0) | 2020.11.18 |
[node.js + react] Would you like to run the app on another port instead? (Y/n) PORT오류 손쉽게 해결하기 (0) | 2020.11.13 |
댓글