멋진 커뮤니티 모듈


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



사용법이유원칙데모설명서



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

그러나 Superstruct는 런타임에 데이터 유효성 검사를 위해 설계되었으므로 귀하 또는 귀하의 최종 사용자를 위해 자세한 런타임 오류를 발생(또는 반환)합니다. 이는 REST 또는 GraphQL API에서 임의의 입력을 수락하는 것과 같은 상황에서 특히 유용합니다. 하지만 사용할 수도 있습니다. 필요할 때 런타임에 내부 데이터 구조의 유효성을 검사합니다.


Usage

Superstruct는 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는 목록 또는 스칼라 구조체 정의, 기본값 적용, 서로 내부에 구조체 구성, 오류를 던지는 대신 반환하는 등의 더 복잡한 사용 사례도 지원합니다. 자세한 내용은 전체 문서를 참조 하세요 .


Why?

joi, express-validator, validator.js, yup, ajv, ...과 같은 기존 유효성 검사 라이브러리가 많이 있지만 is-my-json-valid코드베이스를 유지 관리하기 어렵게 만드는 많은 문제가 있습니다...

  • 그들은 자세한 오류를 노출하지 않습니다. 많은 유효성 검사기는 이유에 대한 세부 정보 없이 단순히 문자열만 오류 또는 부울을 반환하므로 최종 사용자에게 도움이 되도록 오류를 사용자 정의하기 어렵습니다.

  • 많은 검사기가 이메일, URL, UUID 등과 같은 기본 제공 유형과 새 유형을 정의하기 위한 복잡한 API를 제공 하므로 무엇을 확인하는지 알 수 없습니다.

  • 단일 정보 소스를 권장하지 않습니다. 많은 기존 API는 사용자 정의 데이터 유형을 계속해서 재정의하도록 권장하며 전체 코드 베이스에 걸쳐 정보 소스가 분산되어 있습니다.

  • 그들은 오류를 던지지 않습니다. 많은 사람들이 실제로 오류를 던지지 않으므로 모든 곳을 래핑해야 합니다.콜백 시대에는 유용하지만 throw최신 JavaScript에서 사용하지 않으면 코드가 훨씬 복잡해집니다.

  • 그들은 스키마를 미리 컴파일하지 않습니다. 많은 유효성 검사기는 스키마를 일반 JavaScript 개체로 정의합니다. 즉, 스키마 논리의 구문 분석을 유효성 검사 시간에 위임하여 훨씬 느리게 만듭니다.

  • 다른 문제와 밀접하게 연결되어 있습니다. 많은 유효성 검사기가 Express 또는 기타 프레임워크에 밀접하게 연결되어 코드 기반에서 재사용할 수 없는 일회성 혼란 코드가 생성됩니다.

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

물론 모든 유효성 검사 라이브러리가 이러한 모든 문제를 겪는 것은 아니지만 대부분은 적어도 하나 이상을 나타냅니다. 이전에 이 문제에 부딪힌 적이 있다면 Superstruct를 좋아할 것입니다.

Superstruct가 이러한 문제를 어떻게 해결하는지 알게 되었습니다...


Principles

  1. 사용자 지정 가능한 유형 Superstruct의 기능은 응용 프로그램에 고유하고 단일 위치 에서 정의된 전체 사용자 지정 데이터 유형 세트를 쉽게 정의할 수 있도록 하여 요구 사항을 완전히 제어할 수 있도록 하는 것입니다.

  2. 독선적인 기본값: Superstruct는 기본 JavaScript 유형과 함께 제공되며 다른 모든 것은 사용자 정의할 수 있으므로 응용 프로그램의 요구 사항과 다른 "핵심" 결정을 재정의하기 위해 싸울 필요가 없습니다.

  3. 구성 가능한 인터페이스: Superstruct 인터페이스는 구성 가능하므로 일반적으로 반복되는 데이터 조각을 구성 요소로 분해하고 구성하여 더 복잡한 객체를 구축할 수 있습니다.

  4. 간결한 스키마: Superstruct의 스키마는 매우 간결하고 표현력이 풍부하도록 설계되었습니다. 이를 통해 읽기 및 쓰기가 매우 쉬워지고 완전한 데이터 유효성 검사 범위를 가질 수 있습니다.

  5. 컴파일된 유효성 검사기: Superstruct는 미리 스키마를 컴파일하는 작업을 수행하므로 핫 코드 경로의 유효성 검사 함수에 대한 모든 호출에 대해 비용이 많이 드는 작업을 수행하는 데 시간을 소비하지 않습니다.

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

  7. 친숙한 API. Superstruct API는 Typescript , Flow , GoGraphQL 에서 크게 영감 을 받았습니다. 이러한 API에 익숙하다면 해당 스키마 정의 API를 사용하는 것이 매우 자연스럽게 느껴지므로 빠르게 시작할 수 있습니다.


Demo

API 작동 방식에 대한 아이디어를 얻거나 사용 사례를 빠르게 확인하려면 JSFiddle의 라이브 데모를 사용해 보세요 .

데모 스크린샷.


Examples

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


Documentation

Superstruct 작동 방식에 익숙해지려면 시작 가이드를 읽어보세요. 그런 다음 구조체, 유형 및 오류에 대한 자세한 내용은 전체 API 참조를 확인하세요...


License

이 패키지는MIT-licensed.