lang/node
Joi Validation
C/H
2021. 2. 10. 17:20
Joi
- https://joi.dev/
- https://joi.dev/tester/
- https://github.com/sideway/joi
- v17.4.0 joi/API.md
- v16.1.4 joi/API.md
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)
}
반응형