멋진 커뮤니티 모듈

간단하고 구성 가능한 방법
JavaScript로 데이터의 유효성을 검사합니다.



사용법이유는 무엇입니까?원칙데모설명서



Superstruct를 사용하면 인터페이스를 쉽게 정의하고 JavaScript 데이터의 유효성을 검사 할 수 있으며 형식 주석 API는 Typescript , Flow , GoGraphQL 에서 영감을 얻어 친숙하고 이해하기 쉬운 API를 제공합니다.

그러나 Superstruct는 런타임시 데이터의 유효성을 검사하도록 설계되었으므로 사용자 또는 최종 사용자에게 자세한 런타임 오류를 발생 시키거나 반환합니다.이 기능은 REST 또는 GraphQL API에서 임의의 입력을받는 등의 상황에서 특히 유용합니다. 필요할 때 런타임에 내부 데이터 구조를 검증합니다.


Usage

Superstruct는 특정 스키마에 대해 데이터의 유효성을 검사 할 수있는 struct 를 만들기 위해 struct 팩토리를 내 보냅니다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
import { struct } from 'superstruct' const Article = struct({ id: 'number', title: 'string', is_published: 'boolean?', tags: ['string'], author: { id: 'number', }, }) const data = { id: 34, title: 'Hello World', tags: ['news', 'features'], author: { id: 1, }, } const article = Article(data) // This will throw when the data is invalid, and return the data otherwise. // If you'd rather not throw, use `Struct.validate()` or `Struct.test()`.

모든 기본 JavaScript 유형을 즉시 인식하지만, superstruct 내보내기를 사용하여 응용 프로그램 요구 사항에 따라 고유 한 사용자 지정 데이터 유형을 정의 할 수도 있습니다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
import { superstruct } from 'superstruct' import isUuid from 'is-uuid' import isEmail from 'is-email' const struct = superstruct({ types: { uuid: value => isUuid.v4(value), email: value => isEmail(value) && value.length < 256, }, }) const User = struct({ id: 'uuid', email: 'email', is_admin: 'boolean?', }) const data = { id: 'c8d63140-a1f7-45e0-bfc6-df72973fea86', email: 'jane@example.com', } const user = User(data)

Superstruct는 list 또는 스칼라 구조체 정의, 기본값 적용, 서로 내부 구조체 구성, 던지기 대신 오류 반환 등과 같이보다 복잡한 사용 사례도 지원합니다. 자세한 내용은 전체 설명서 를 참조하십시오.


Why?

기존 많이 검증 libraries-있다 joi , express-validator , validator.js , yup , ajv , is-my-json-valid ...하지만 전시 많은에 그들은 연체 코드베이스로 리드 하드되기한다는 것은 유지하기 위해 ...

  • 그들은. 자세한 오류에 노출되지 않도록 많은 유효성 검사기는 단순히 어려운 최종 사용자에게 도움이 될 오류를 사용자 정의 할 수있게 이유에 관해서는 어떤 세부 사항없이 문자열 전용 오류 또는 논리 값을 반환합니다.

  • 그들은 사용자 정의 유형을 어렵게 만든다. 많은 유효성 검사기 와 함께 제공되는 내장 그들이 확인하고 새로운 유형을 정의하는 API를 복잡하게 알 수있는 방법 등등 이메일, URL을 UUID가 같은 종류.

  • 단일 소스의 소스를 장려하지 않고 기존의 많은 API는 사용자 정의 데이터 유형을 계속해서 재정의하는 것을 권장하며, 전체 소스에 진리의 소스가 분산되어 있습니다.

  • 투사 오류 그들은하지 않습니다. 많은 어디에나 포장을 강제로 오류에 실제로 던져하지 않습니다. 사용하지 않는, 콜백의 일에 도움이 있지만 throw 더 복잡한 현대 자바 스크립트 코드 많은 차종에 있습니다.

  • 그들은 스키마 컴파일을 미리하지 않습니다. 많은 유효성 검사기는 훨씬 느린들을 만들고, 그들이 검증 시간 스키마 논리의 분석을 위임 수단 일반 자바 스크립트 객체로 스키마를 정의한다.

  • 그들은 밀접하게 다른 문제로 결합하고 있습니다. 많은 검증이 단단히 일회성의 결과는, 당신의 코드베이스에서 다시 사용할 수없는 코드를 혼란 Express 또는 다른 프레임 워크에 연결된다.

  • JSON 스키마를 사용합니다. 잘못하지 마세요 .JSON 스키마 유용 할 수 있지만, HATEOAS와 비슷합니다. 일반적으로 필요한 것보다 훨씬 복잡하고 이점을 사용하지 않습니다. (죄송합니다. .)

물론 모든 유효성 검사 라이브러리에 이러한 문제가 모두있는 것은 아니지만 대부분이 하나 이상의 문제를 겪고 있습니다. 이러한 문제가 발생했다면 Superstruct를 좋아할 것입니다.

Superstruct가 이러한 문제를 해결하는 방법을 알려줍니다 ...


Principles

  1. 사용자 정의 가능한 유형 Superstruct의 강력한 기능은 애플리케이션에 따라 단일 장소에서 정의 된 전체 사용자 정의 데이터 유형 세트를 쉽게 정의 할 수 있도록하므로 요구 사항을 완벽하게 제어 할 수 있습니다.

  2. Unopinionated 기본값 Superstruct는 기본 JavaScript 유형으로 제공되며 다른 모든 항목은 사용자 정의 할 수 있으므로 응용 프로그램의 요구와 다른 "핵심"의 결정을 무시하기 위해 싸울 필요가 없습니다.

  3. 컴포저 블 인터페이스 : Superstruct 인터페이스는 컴포지션이 가능하므로 일반적으로 반복되는 데이터를 구성 요소로 분류하고보다 복잡한 객체를 구성 할 수 있습니다.

  4. 간결한 스키마 Superstruct의 스키마는 매우 간결하고 표현력이 뛰어나 도록 설계되었으므로 읽고 쓰기가 매우 쉬워 전체 데이터 유효성 검사 범위를 갖출 수 있습니다.

  5. 컴파일 된 유효성 검사기 Superstruct는 스키마를 미리 컴파일하는 작업을 수행하므로 핫 코드 경로의 유효성 검사 함수를 호출 할 때마다 값 비싼 작업을 수행하는 데 시간이 걸리지 않습니다.

  6. 유용한 오류 Superstruct에서 발생하는 오류에는 오류를 자신의 응용 프로그램 별 오류로 쉽게 변환하는 데 필요한 모든 정보가 포함되어있어 최종 사용자에게보다 유용한 오류가 발생합니다!

  7. 친숙한 API Superstruct API는 Typescript , Flow , GoGraphQL 에서 많은 영향을 받았으며,이 중 하나에 익숙하다면 스키마 정의 API를 사용하는 것이 매우 자연 스럽기 때문에 빠르게 시작할 수 있습니다.


Demo

JSFiddle라이브 데모를 통해 API 작동 방식에 대한 아이디어를 얻거나 사용 사례를 신속하게 확인하십시오.

데모 스크린 샷.


Examples

Superstruct의 API는 매우 유연하여 서버와 브라우저에서 다양한 사용 사례에 사용할 수 있습니다. 일반적인 패턴의 몇 가지 예는 다음과 같습니다.


Documentation

시작 안내서를 읽고 Superstruct의 작동 방식을 숙지 한 후 구조체, 유형 및 오류에 대한 자세한 정보는 전체 API 참조를 확인하십시오.


License

이 패키지는 MIT-licensed 입니다.