오늘은 공부 중/자바스크립트

[node.js celebrate/ joi] celebrate Is not a function 에러, json이 아닌 html error() 문제

이도토리 2021. 9. 8. 11:11

https://gumpcha.github.io/blog/joi-overview

 

Joi, Javascript object schema validator

시작하기 API 수준이든, 함수 수준이든 외부 입력을 항상 validation하는 습관은 중요하다. 귀찮다고 빼 먹는다면 언젠가는 분명 문제를 일으킬 것이다. 많은 node용 validator가 있지만 Joi가 우수한 점

gumpcha.github.io

문법적으로 기억할 부분 많다!

 

 

많은 node용 validator가 있지만 Joi가 우수한 점은 관계에 따른 내용을 정의할 수 있다는 점이다. 예를 들어 a b가 둘 중에 하나라도 있으면 된다든가, a가 있을 때만 b가 있어야 된다는 식이다.

 

Joi의 동작

기본적인 중요한 부분은 훑었으니, Joi의 동작 방식을 몇 가지 알아보자.

.unknown() API

schema에 정의되지 않은 key는 validate error가 난다. 이를 피하려면 .unknown() API를 쓰면 된다.

 

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

 

 

https://medium.com/the-andela-way/an-easy-way-to-overwrite-joi-celebrate-express-error-messages-5435e6bab2c5

 

An easy way to overwrite Joi, Celebrate, Express error messages

What is Joi?

medium.com

 

Joi 는 JavaScript 개체에 대한 개체 스키마 정의 언어 및 유효성 검사기입니다. 규칙 집합을 만들고 이에 대해 입력 데이터의 유효성을 검사할 수 있는 마법의 도구입니다. 얼마나 멋진가요?

NPM 패키지가 매주 3백만에 가까운 다운로드를 자랑합니다! 아마도 지구상에서 가장 많이 사용되는 JavaScript 스키마 유효성 검사기일 것입니다.

 

https://thekenyandev.com/blog/handling-errors-and-validating-requests-in-nodejs-with-celebrate/

 

TheKenyanDev: Handling Errors and Validating Requests in NodeJS with Celebrate

All data that goes into your database or through an API needs to be validated. Koi and Celebrate take away most of the problems with manual validation.

thekenyandev.com

 

celebrate Is not a function at Object.<anonymous> 에러가 날 경우,

celebrate 내부의 속성(property) celebrate를 가져오는 게 아니라 그냥 셀러브레이트 자체를 import 했는 확률이 높다.

 

{} 이렇게 object 내부에서 꺼내오는 방식으로 수정하면 된다.

 

const { celebrate } = require('celebrate');

날짜 확인

Joi 로 날짜  확인하는 방법에는 여러 가지가 있습니다 . 우리의 경우 날짜는 항상 현재 연도보다 작거나 같아야 합니다. 우리는 max함수로 이것을 달성할 수 있습니다 .

const date = Joi.date().max("now")

우리가 2000년 이전에 출판된 것을 책으로 간주하지 않는 독단적인 플랫폼이라면 대신 다음과 같은 코드를 사용할 수 있습니다.

const year = Joi.number().integer().min(0).max(2000),

등등...

링크 확인

Joi API와의 링크 유효성 검사는 매우 간단합니다.

const url = Joi.string().uri()

 

 

 

Joi .object ()

Joi.object()작업 할 Joi 스키마 개체를 인스턴스화하도록 정의 하고 있습니다. 모든 스키마에는 유효성 검사 및 기타 Joi 기능을 처리하기 위해 Joi.object가 필요합니다.

 

 

또한 Joi.boolean()위 의 규칙 을 도입했습니다.이 규칙은 true 또는 false 값을 예상하는 체크 박스 및 기타 스위치를 테스트하는 데 유용합니다.

몇 가지 유용한 Joi 스키마 방법 (제약 조건)

지금까지 사용자 이름 및 암호 예제에 대한 문자열 유효성 검사를 사용했습니다. 이제 Joi 이해를 넓히기 위해 다른 스키마 규칙을 살펴 보겠습니다.

또한 이러한 메서드 / 규칙을 Joi 문서 전체에서 사용되는 용어 인 제약 조건 으로 참조 할 수 있습니다 . 우리의 가치는 이러한 규칙을 준수해야하므로 우리의 가치를 가능한 값의 특정 필드로 제한해야합니다.

email()

Joi에서는 이메일 유효성 검사가 매우 강력합니다. 이메일 주소 형식의 유효성을 테스트 할뿐만 아니라 특정 최상위 도메인을 허용 목록에 추가 할 수도 있습니다. 전체 기능 은 email ()  API 참조를 확인하십시오 .

 

 

https://github.com/arb/celebrate#example-usage

 

GitHub - arb/celebrate: A joi validation middleware for Express.

A joi validation middleware for Express. Contribute to arb/celebrate development by creating an account on GitHub.

github.com

celebrate 사용법

 

그리고 자꾸 에러 시에 json이 아닌 html을 뱉어낼 때에는 router 경로를 app.use 한 다음에 

app.use(errors());가 적혀 있는 게 맞는지 체크해봐야 한다.

 

https://stackoverflow.com/questions/62294034/celebrate-joi-returns-in-case-of-error-html-instead-of-json

 

Celebrate/Joi returns in case of error HTML instead of JSON

Currently I've celebrate installed on my Node/Express server. Whenever certain validation criteria is not met, it receive the error in an HTML file instead of a JSON object. I am using the const ap...

stackoverflow.com

 

 

Object schema validator Joi

https://medium.com/@jaeikpark81/node-js-express-api-validator-joi-91f24435f65a

 

node.js express api validator (joi)

현재 공부 목적으로 firebase 위에서 돌아가는 간단한 게시판 토이 프로젝트를 만드는 중입니다.

medium.com