[TIL] joi 23.07.10

이상훈·2023년 7월 11일
0

[내일배움캠프]

목록 보기
43/68

joi

팀프로젝트나 심화 과제를 하면서 느꼈던 점은 유효성 검사를 진행하게 되면 if문을 자주 사용하게 되어서 코드가 길어지고 한눈에 안들어온다고 느껴졌다.
다른 팀이 joi 라이브러리를 사용하여 유효성 검사를 진행했던 것을 보고 따로 찾아보니 중복적으로 사용하는 코드를 줄여주기 위해 joi 라이브러리를 사용하면 비교적 깔끔하게 유효성 검사를 할 수 있다고 한다.

joi의 간단한 사용예제

joi가 좋은 점은 관계에 따른 내용을 정의할 수 있다. 예를 들어 a와 b가 둘 중에 하나라도 있으면 된다던가, a가 있을때만 b가 있어야 된다는 식으로 사용할 수 있다.

const Joi = require('joi');

// validate할 schema 정의
const schema = Joi.object().keys({
  username: Joi.string().min(3).max(30).required(),
  birthyear: Joi.number().integer().min(1900).max(2018),
});

// validate할 object
const user = {
  username: 'username1',
};

// validate
const {error, value} = Joi.validate(user, schema);
console.log(error); // null
console.log(value); // {username: "username1"}

joi의 동작

schema에 정의되지 않은 key는 valdate error가 나므로 .unknown() API를 사용하여 방지

const Joi = require('joi');

// .unknown()이 없는 경우
const schema1 = Joi.object().keys({
  username: Joi.string().min(3).max(30).required(),
});

const user1 = {
  username: 'username1',
  birthyear: 2014,   // schema1에 정의되지 않은(unknown) 'birthyear'
};
const {error: error1, value: value1} = Joi.validate(user1, schema1);
console.log(error1); // Error: "birthyear" is not allowed
console.log(value1); // {username: "username1", birthyear: 2014}


// .unknown()이 있는 경우
const schema2 = Joi.object().keys({
  username: Joi.string().min(3).max(30).required(),
})
  .unknown();  // 정의되지 않은 key도 허용함.

const user2 = {
  username: 'username1',
  birthyear: 2014,   // schema1에 정의되지 않은(unknown) 'birthyear'
};
const {error: error2, value: value2} = Joi.validate(user2, schema2);
console.log(error2); // null
console.log(value2); // {username: "username1", birthyear: 2014}

abortEarly option

에러가 나면 더 이상 진행하지 않는 것이 기본 동작(abortEarly: true). 한 번에 에러를 확인하고자 한다면 validate 시점에 동작을 제어할 수 있는 validate()의 세 번째 파라미터로 {abortEarly : false}를 설정하면 된다.

const options: {
  abortEarly: false,
};

관계 API

.and, .or, .nand, .xor

참고 블로그 : https://gumpcha.github.io/blog/joi-overview

profile
코린이

0개의 댓글