lang/node

Joi Validation

C/H 2021. 2. 10. 17:20

Joi

const Joi = require('joi');

const schema = Joi.object({
    username: Joi.string()  // 문자
        .alphanum() // 알파벳, 숫자
        .min(3) // 최소 3이상
        .max(30) // 최대 30이하
        .required(), // 필수
    password: Joi.string() // 문자
        .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')), // 정규식
    repeat_password: Joi.ref('password'), // 비밀번호 학인
    access_token: [ // 제한되지 않은 문자열 or 숫자
        Joi.string(), // 문자
        Joi.number() // 숫자
    ],
    birth_year: Joi.number() // 숫자
        .integer() // 
        .min(1900)  // 최소 1900 이상
        .max(2013), // 최대 2013 이하
    email: Joi.string()
        .email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } })
})
    .with('username', 'birth_year')
    .xor('password', 'access_token')
    .with('password', 'repeat_password');


schema.validate({ username: 'abc', birth_year: 1994 });
// -> { value: { username: 'abc', birth_year: 1994 } }

schema.validate({});
// -> { value: {}, error: '"username" is required' }

const {params, err} = schema.validate({ username: 'abc', birth_year: 1994 });
if (err){
  console.error(`Joi error: `, err)
}

// Also -

try {
  const value = await schema.validateAsync({ username: 'abc', birth_year: 1994 });
}
catch (err) {
  console.error(`Joi error: `, err)
}
반응형