사용자가 입력한 데이터가 유효한지 검사하는 유효성 검사 라이브러리 라고 할 수 있다.
현재 진행중인 미니프로젝트에서, 회원가입을 할 때 주어진 규칙(아이디는 몇 자 이상, 글자는 지정한 글자들만 가능하게 사용 등)을 통과하는 값들만 입력되도록 제한할 수 있다.
다음은 현재 미니프로젝트에 실제로 사용중인 코드이다.
const userId_pattern = /^[a-z|A-Z|0-9]+$/; // userId는 알파벳 대소문자 (a~z, A~Z), 숫자(0~9)로 구성
const nickname_pattern = /^[ㄱ-ㅎ|가-힣|a-z|A-Z|0-9]+$/; // 닉네임은 한글, 알파벳 대소문자 (a~z, A~Z), 숫자(0~9)로 구성
const postUserSchema = Joi.object({
userId: Joi.string()
.min(3)
.pattern(new RegExp(userId_pattern))
.required(),
password: Joi.string().min(4).required(),
nickname: Joi.string()
.min(2)
.pattern(new RegExp(nickname_pattern))
.required(),
});
하나씩 풀어보면 아래와 같다.
userId: Joi.string() // 들어오는 값은 문자열
.min(3) // 최소 3자리 이상
.pattern(new RegExp(userId_pattern)) // userId_pattern에 맞아야 함. 위에서 지정한 /^[a-z|A-Z|0-9]+$/ 는 알파벳 대소문자, 숫자로 구성
.required() // 빈 값이 올 수 없음.
메서드를 계속 이어붙여서 여러가지 유효성 검사를 할 수 있는 옵션들을 붙일 수 있다.
try{
const { userId, password, nickname } = await postUserSchema.validateAsync(req.body);
}
...
catch(err){
res.status(400).send({})
...
}
위에서 지정한 검사 그룹인 postUserSchema
를 validateAsync
를 사용하여 검사 시, 전체 구문을 try~catch
구문으로 묶어 비동기적으로 처리할 수 있다. validation에 실패한 경우 catch 문에서 에러를 발생시킨다.