So schreiben Sie leistungsstarke Schemas in JavaScript

Einführung von schm, einer funktionalen und hochkompositiven Bibliothek zum Erstellen von Schemas in JavaScript und Node.js.

Ich arbeite seit 2002 mit HTML, CSS und JavaScript. Das erste Mal, dass ich ein Schema in JavaScript benötigte, war erst vor einigen Jahren.

Nachdem ich viele verschiedene Bibliotheken benutzt und sogar eine und eine andere verfasst hatte, entschied ich mich, schm zu erstellen. Das ist das Ergebnis all meiner Erfahrungen mit Schemas in JavaScript.

Was ist schm?

schm ist eine Gruppe von npm-Paketen, mit denen Entwickler mit Schemas in JavaScript und Node.js umgehen können.

Es ist stark von Mungo-Schemata inspiriert. Tatsächlich sind sie sich so ähnlich, dass Sie schmParameter in Mongoose-Schemata verwenden können und umgekehrt. Es ist jedoch nicht MongoDB-spezifisch. Sie können es für alles in JavaScript verwenden.

Welche Probleme löst schm?

? Analyse und Validierung von Formularwerten

Auf dem Client können Sie Schemas verwenden, um Modelle für HTML-Formulare zu definieren. Dies erleichtert das Transformieren und Validieren von Werten. Wenn Sie Node.js auf dem Server verwenden, können Sie dasselbe Schema verwenden. Das Ergebnis ist ein konsistentes Verhalten zwischen Client- und Serverüberprüfungen.

? Analyse und Validierung der Abfragezeichenfolge

Betrachten Sie die folgende Abfragezeichenfolge : /?term=John&page=2&limit=10. Durch die Kombination von Paketen wie schm-koa, schm-express und / oder schm-mongo können Sie Abfragezeichenfolgen mit Suchbegriffen und Paginierung mühelos analysieren und validieren.

☊ Kommunikation zwischen Client und Server

Wenn Sie beispielsweise eine App haben, die Ressourcen von einer REST-API verbraucht, können Sie mithilfe von Schemas auf dem Client die Objektstruktur definieren, die Ihr Client vom Server erwartet. Wenn sich auf dem Server etwas ändert (z. B. wurden die Eigenschaften umbenannt), können Sie einfach Ihr Schema aktualisieren, damit Ihre gesamte Anwendung weiterhin funktioniert.

Erstellen eines Schemas

Ein einfaches Schema ist nur eine Karte von Schlüsseln und Typen:

Das ist dasselbe wie bei der Verwendung einer typeEigenschaft:

Ein Schema kann auch eine Zuordnung zwischen Schlüsseln und Standardwerten sein. Typen werden automatisch abgeleitet:

Dies entspricht dem folgenden Vorgang:

Weitere Informationen zum Schreiben von Schemata finden Sie unter Mongoose-Schemas.

Analysieren von Werten

Nachdem Sie das Schema definiert haben, können Sie damit Werte analysieren. Dieser Prozess konvertiert Werte in die richtigen Typen und wendet andere im Schema definierte Parser an. Dies sind die verfügbaren Parser: type, default, set, get, trim, uppercase, lowercase.

Die Ausgabe wird ungefähr so ​​aussehen:

{ name: "HAZ", birthdate: Tue Apr 10 1990 00:00:00 GMT,}

Werte validieren

Genau wie in Mongoose-Schemas können Sie Validierungsregeln in Ihren Schemas definieren. Dies sind die verfügbaren Validatoren: validate, required, match, enum, max, min, maxlength, minlength.

Sie können auch benutzerdefinierte Parser und Validatoren erstellen, indem Sie das Schema erweitern. Wir werden später in diesem Artikel darüber sprechen.

Der Validierungsfehler ist standardmäßig ein Array von Objekten, die die Fehler beschreiben.

[ { message: "age must be greater than or equal 18", min: 18, param: "age", validator: "min", value: 17, }]

Wenn die Validierung erfolgreich ist, werden die analysierten Werte genau wie zurückgegeben zurückgegeben parse().

Mehrere Schemata erstellen

Sagen Sie bitte getrennte Schemata haben beschreiben ein body, identityund andere Dinge, und wollen , dass sie komponieren ein bauen humanSchema. Das ist so einfach wie es sich anhört:

Eine andere Möglichkeit, Schemas zu erstellen, ist das Verschachteln. Ein Schema kann typeinnerhalb eines anderen Schemas verwendet werden:

Schemata erweitern

Dies ist der Teil, in dem schmwirklich glänzt. Sie können benutzerdefinierte Parser und Validatoren hinzufügen oder sogar das Standardverhalten von parseund validateMethoden ersetzen, indem Sie Schemagruppen erstellen.

Eine Schemagruppe ist eine Funktion, die das vorherige Schema als einziges Argument empfängt. Neben früheren params, parsersund validatorsweist das Schemaobjekt ein mergeVerfahren, das nützlich ist für Funktionen Schemagruppe neue Funktionalität in den vorherigen Schemata zu fusionieren.

Die Ausgabe des obigen Snippets sieht ungefähr so ​​aus:

{ name: "Haz!!!", age: 27,}

Wenn Sie weiter gehen und mehr darüber erfahren möchten, wie Sie benutzerdefinierte Parser erstellen, sehen Sie sich hier an, wie Parser in der Kernbibliothek geschrieben sind.

Durch die Erweiterung von Schemata können wir viele Arten von Dingen erstellen. So werden die meisten schmSatellitenbibliotheken wie schm-translate, schm-computed und schm-mongo geschrieben.

Wir werden jetzt über einen von ihnen sprechen.

Wertetasten umbenennen

schm-translate ist eine der einfachsten und leistungsstärksten Satellitenbibliotheken von schm. Es sind ein paar mehr als 10 Codezeilen, die in einer Funktion komprimiert sind, mit der Sie Werteschlüssel in Ihre Schemaschlüssel übersetzen können.

Angenommen, Sie arbeiten an einer Webanwendung, die Ressourcen aus einer REST-API verbraucht. Plötzlich ändern Entwickler Änderungen an der API, wodurch der Antworttext ein etwas anderes Modell zurückgibt als das, das der Client erwartet hat. Anstelle einer emailEigenschaft wird jetzt ein Array von zurückgegeben emails.

Dies wird wahrscheinlich dazu führen, dass Ihre App kaputt geht. Wenn Sie kein Schema oder keine andere zentralisierte Methode zur Behandlung dieses Objekts haben, müssen Sie jeden Teil der Anwendung aktualisieren, um den Serveränderungen zu entsprechen.

Mit schmund schm-translatekann es gelöst werden, indem einige Codezeilen an nur einer Stelle geändert werden:

Die Ausgabe entspricht genau der, die Ihre App vor der Änderung erwartet hat:

{ name: "Haz", email: "[email protected]",}

Klicken Sie hier, um die Liste aller Pakete anzuzeigen

Wie unterscheidet sich das von anderen Schemabibliotheken?

Eine häufig gestellte Frage ist der Unterschied zwischen schmund anderen Bibliotheken wie Joi und ajv (die der JSON-Schemaspezifikation folgen).

Im Vergleich zu ajv, schmfolgt keiner bestimmte spec. Stattdessen wird versucht, die Mongoose Schema-API nachzuahmen. Obwohl ajves einige Analysefunktionen gibt, sind sie auf Standardwerte und Typenzwang beschränkt.

In schmist die Fähigkeit, Werte Parsen basierend auf dem Schema , was es möglich macht , einen Abfrage - String in eine MongoDB Abfrage, zum Beispiel zu transformieren.

Das heißt, beides Joiund ajvkann mit kombiniert werden schm. Sie können es leicht erweitern, um eine andere Validierungsmethode zu verwenden:

Vielen Dank für das Lesen!

Wenn es Ihnen gefällt und Sie es nützlich finden, können Sie Folgendes tun, um Ihre Unterstützung zu zeigen:

  • Klatschen? Schaltfläche auf diesem Artikel einige Male (bis zu 50)
  • Geben Sie einen Stern ⭐️ auf GitHub: //github.com/diegohaz/schm
  • Folgen Sie mir auf GitHub: //github.com/diegohaz
  • Folgen Sie mir auf Twitter: //twitter.com/diegohaz