안녕하세요, 김현지입니다.
오늘은 유효성 검사를 깔끔하게 할 수 있는 express-validator에 대해 알아보겠습니다!
express-validator는 express에서 사용할 수 있는 유효성 검사 모듈입니다.
미들웨어 함수로도 사용할 수 있고, API 형태로 활용도 가능합니다.
validator.js를 활용해 편리하게 제작된 모듈입니다.
POST 라우터를 구현할 때, Client(View) 수준에서만 유효성 검사를 진행할 경우 여러 취약점이 발생하기 때문에 Controller 수준의 서버에서의 유효성 검증이 꼭 필요합니다.
import { check, validationResult } from "express-validator";
import 문을 활용해서 express-validator를 사용합니다.
router.post(
"/",
[
check("name", "Name is required").not().isEmpty(),
check("email", "Please include a valid email").isEmail(),
// ...
);
POST 라우터 코드의 인자로 check()
를 사용합니다.
check()
는 request 파라미터를 인자로 받습니다.
그 후에 validationResult()
를 활용해서 유효성 검사를 진행하면 됩니다.
여기에서 check()
뒤에 not
isEmpty
등의 간단한 검증이 나열되어있습니다. (아래 참고)
POST 라우터 코드의 인자로 유효성을 검사할 check()를 넘겨주었으면, 비즈니스 코드를 작성하는 부분 (콜백 부분) 에 validationResult
를 사용하면 됩니다.
router.post(
"/",
[
check("name", "Name is required").not().isEmpty(),
check("email", "Please include a valid email").isEmail()
]
async (req, res) => {
const errors = validationResult(req);
// ...
}
);
validationResult
는 request로 넘어오는 파라미터들을 check
부분의 유효성을 검증한 후 에러가 발생하면 배열 형태로 반환하는 함수입니다.
따라서 저 errors
가 비었으면 유효성 검증이 통과된 것입니다.
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
그래서 위의 형태로 에러 처리를 해주면 유효성 검증을 짧고 간단한 코드로 할 수 있습니다.
만약, 복잡하고 긴 형태의 유효성 검증이 필요하다면 미들웨어 함수로 따로 분리한 후에 활용하는 방법을 사용하시는 것이 좋을 것 같습니다.
trim()
: 공백을 제거해줍니다.isLength(num)
: 길이가 num인지 확인해줍니다. { min: num, max: num }
과 같이 최소, 최대 값도 지정할 수 있습니다.bail()
: 해당 부분에서 에러가 발생하면 다음으로 넘어가지 않습니다.isNumeric()
: 숫자 형태이지 확인한다. string이어도 해당 string이 숫자인지 확인해줍니다.isEmail()
: string이 이메일 형태인지 확인해줍니다.isJSON()
: string이 유효한 JSON인지 확인해줍니다. JSON.parse를 사용한다고 합니다.isMobilePhone()
: string이 모바일 휴대폰 번호인지 확인해줍니다.이외에 더 많은 함수는 validator.js를 확인해주세요 :)
validator.js
express-validator
validation input in Express using express-validator
Wow, what a gold crate of a website! If anyone's curious about this topic, look no further. Your insights are on point, and it's nearly impossible to dispute your perspective. You've managed to make a well-trodden subject feel exciting and new. Fantastic work—simply brilliant!
https://www.shinebrightx.com/project-management/pmp-certification-training
https://www.shinebrightx.com/project-management/capm--certification-training
https://www.shinebrightx.com/project-management/project-management-techniques
https://www.shinebrightx.com/soft-skill-training/conflict-management-training
https://www.shinebrightx.com/cyber-security/cisa-certification-training
https://www.shinebrightx.com/cyber-security/cism-certification-training
https://www.shinebrightx.com/corporate-training
https://www.shinebrightx.com/project-management/change-management-certification
https://www.shinebrightx.com/it-service-management/itil-foundation-training
https://www.shinebrightx.com/agile-management/csm-certification-training
https://www.shinebrightx.com/quality-management/lean-six-sigma-green-belt
https://www.shinebrightx.com/cyber-security/cissp-certification-training
Excellent article! We will be linking to this great post on our site. Keep up the good writing.
https://infocampus.co.in/web-development-training-in-bangalore.html
https://infocampus.co.in/web-designing-training-in-bangalore.html
https://infocampus.co.in/front-end-development-course-in-bangalore.html
https://infocampus.co.in/reactjs-training-in-marathahalli-bangalore.html
https://infocampus.co.in/javascript-jquery-training-in-bangalore.html
https://infocampus.co.in/ui-development-training-in-bangalore.html