728x90
반응형
Joi란
사용자가 입력한 데이터가 유효한지 검사하는 유효성 검사 라이브러리 라고 할 수 있다.
설치 및 사용하기
npm install joi
joi를 사용하기 위해서 install해준다.
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),
});
유효성 검사를 하려면 db에 정의되어 있는 컬럼들을 가져와서 몇개의 컬럼만 유효성 검사를 할 수 있다.
- username: 글자이고, 길이가 최소 3글자에서 최대 30글자이며, 필수 항목이다.
- birthyear: 숫자이며, 정수이고, 최소 1900에서 최대 2013까지 허용한다.
유효성 검사하기
const {error, value} = Joi.validate(validate할 object, schema);
정의된 스키마에 대해 값의 유효성을 검사를 한다. 만약 여기서 입력이 잘못되었다면 error를 발생시켜, undefined를 출력하게 된다.
// validate할 object
const user = {
username: 'username1',
};
// validate
const {error, value} = Joi.validate(user, schema);
console.log(error); // null
console.log(value); // {username: "username1"}
반응형
스키마를 정의한 코드에서 위의 코드를 덧붙이면 유효성 검사를 할 수 있다. 콘솔로 찍어보면 에러가 났는지, 값이 제대로 출력되는지 알 수 있다.
기능
joi을 보고 몇가지 괜찮은 기능을 서술했다. 더 자세히 보고싶다면 아래의 참고에 github사이트가 있다. 이를 들어가면 상세한 joi의 기능을 볼 수 있다.
1) assert()
assert(value, schema, [message], [options])
스키마에 대해 값의 유효성을 검사하고 유효성 검사가 실패하면 발생한다.
- value : 유효성을 검사할 값이다.
- schema : 검증할 값이다.
- message : 오류가 나면 나오는 메시지이다.
2) types()
const { object, string } = Joi.types();
다른 언어의 typeof처럼 type을 알려준다.
3) any
const any = Joi.any();
모든 데이터 유형과 일치하는 스키마 개체를 생성한다.
4) describe()
const schema = Joi.any().valid('foo', 'bar');
console.log(schema.describe());
스키마의 내부 구성을 나타내는 개체를 반환한다.
{ type: 'any',
flags: { only: true },
valids: [ 'foo', 'bar' ] }
5) .unknown() API
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}
db에 정의되지 않은 컬럼을 넣어주게 되면 에러가 난다. joi에서는 이러한 에러를 피하고자 .unkown()기능을 쓰면 된다.
6) custom()
any.custom(method, [description])
- value :검증되는 값이다.
- helpers : 여러가지 개체가 출력된다.
- original : 변환 전에 유효성 검사에 전달된 원래 값이다.
- error(code, [local]) : 메시지 코드와 선택적 로컬 컨텍스트를 사용하여 오류 코드를 생성한다.
- message(messages, [local]) : 재정의로 사용할 제공된 메시지 개체와 내부 오류 코드로 오류를 생성하는 메서드입니다. 환경 설정 옵션을 사용하는 것보다 훨씬 느리지만, 성능이 중요하지 않은 경우 작성하기가 훨씬 더 간단하다.
- warn(code, [local]) : 메시지 코드와 선택적 로컬 컨텍스트를 사용하여 경고를 추가한다.
👇🏻 참고
728x90
반응형