Joi (Validator)

싱클베어·2022년 2월 12일
0

Joi란

사용자가 입력한 데이터가 유효한지 검사하는 유효성 검사 라이브러리 라고 할 수 있다.

현재 진행중인 미니프로젝트에서, 회원가입을 할 때 주어진 규칙(아이디는 몇 자 이상, 글자는 지정한 글자들만 가능하게 사용 등)을 통과하는 값들만 입력되도록 제한할 수 있다.

사용 예

다음은 현재 미니프로젝트에 실제로 사용중인 코드이다.

 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({})
...
}

위에서 지정한 검사 그룹인 postUserSchemavalidateAsync를 사용하여 검사 시, 전체 구문을 try~catch 구문으로 묶어 비동기적으로 처리할 수 있다. validation에 실패한 경우 catch 문에서 에러를 발생시킨다.

참고 URL

Joi, Javascript object schema validator

Joi introduction

profile
안녕하세요.

0개의 댓글