Kā uzrakstīt jaudīgas shēmas JavaScript

Iepazīstinām ar schm - funkcionālu un viegli saliekamu bibliotēku, lai izveidotu shēmas JavaScript un Node.js

Es strādāju ar HTML, CSS un JavaScript kopš 2002. gada. Pirmo reizi man kaut kāda shēma JavaScript bija nepieciešama tikai pirms dažiem gadiem.

Pēc daudzu dažādu bibliotēku izmantošanas un pat vienas un otras autorēšanas es nolēmu izveidot schm. Tas ir visas manas pieredzes rezultāts ar shēmām JavaScript.

Kas ir schm?

schm ir npm pakotņu grupa, kas palīdz izstrādātājiem tikt galā ar shēmām JavaScript un Node.js.

To ļoti iedvesmo Mongoose Schemas. Patiesībā tie ir tik līdzīgi, ka jūs varat izmantot schmparametrus Mongoose shēmās un otrādi. Tomēr tas nav specifisks MongoDB. Varat to izmantot visam JavaScript.

Kādas problēmas risina schm?

? Formas vērtību parsēšana un apstiprināšana

Klientā varat izmantot shēmas, lai definētu modeļus HTML veidlapām. Tas atvieglo vērtību pārveidošanu un apstiprināšanu. Turklāt, ja serverī izmantojat Node.js, varat izmantot to pašu shēmu. Rezultāts ir konsekventa uzvedība starp klienta un servera validācijām.

? Parsēšana un vaicājuma virknes validācija

Apsveriet šādu vaicājumu virkni: /?term=John&page=2&limit=10. Apvienojot tādas paketes kā schm-koa, schm-express un / vai schm-mongo, jūs varēsiet viegli parsēt un apstiprināt vaicājuma virknes ar meklēšanas vienumiem un lapošanu.

☊ Saziņa starp klientu un serveri

Piemēram, ja jums ir lietotne, kas patērē resursus no REST API, varat izmantot shēmas, lai klientā noteiktu objekta struktūru, kuru klients sagaida no servera. Ja serverī kaut kas mainās (piemēram, rekvizīti ir pārdēvēti), varat vienkārši atjaunināt savu shēmu, lai visa jūsu lietojumprogramma turpinātu darboties.

Shēmas izveide

Vienkārša shēma ir tikai atslēgu un veidu karte:

Tas ir tas pats, kas izmantot typeīpašumu:

Shēma var būt arī karte starp atslēgām un noklusējuma vērtībām. Veida veidi tiks automātiski secināti:

Tas ir līdzvērtīgi šādām darbībām:

Lai uzzinātu vairāk par shēmu rakstīšanu, ieskatieties Mongoose Schemas.

Parsēšanas vērtības

Pēc shēmas definēšanas to var izmantot, lai parsētu vērtības. Šis process konvertēs vērtības pareizajos tipos, kā arī piemēros citus shēmā definētos parsētājus. Tie ir pieejami parsētājs: type, default, set, get, trim, uppercase, lowercase.

Rezultāts būs apmēram šāds:

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

Apstiprina vērtības

Tāpat kā Mongoose shēmās, savās shēmās varat definēt validācijas noteikumus. Tie ir pieejami vērtētājiem: validate, required, match, enum, max, min, maxlength, minlength.

Varat arī izveidot pielāgotus parsētājus un validatorus, paplašinot shēmu. Par to mēs runāsim vēlāk šajā rakstā.

Apstiprināšanas kļūda pēc noklusējuma būs objektu masīvs, kas apraksta kļūdas.

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

Ja validācija nokārtos, tā atgriezīs parsētās vērtības tāpat kā parse().

Vairāku shēmu sastādīšana

Say jums ir atsevišķas shēmas apraksta body, identityun citas lietas, un vēlaties rakstīt tos, lai izveidotu humanshēmu. Tas ir tik vienkārši, kā izklausās:

Vēl viens veids, kā sastādīt shēmas, ir ligzdošana. Shēmu var izmantot kā typecitu shēmu:

Shēmu paplašināšana

Šī ir tā daļa, kurā schmpatiešām spīd. Varat pievienot pielāgotus parsētājus un validatorus vai pat aizstāt noklusējuma uzvedību parseun validatemetodes, izveidojot shēmu grupas.

Shēma grupa ir funkcija, kas saņem iepriekšējo shēmu, kā vienīgo argumentu. Bez iepriekšējās params, parsersun validators, tad shēmas objektu ir mergemetode, kas ir noderīga shēma grupas funkcijas apvienot jaunu funkcionalitāti iepriekšējās shēmas.

Iepriekš minētā fragmenta izvade būs aptuveni šāda:

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

Ja vēlaties iet tālāk un uzzināt vairāk par to, kā izveidot pielāgotus parsētājus, apskatiet, kā parsers tiek rakstīts galvenajā bibliotēkā šeit.

Paplašinot shēmas, mēs varam izveidot daudz dažādu lietu. Tā schmtiek uzrakstīta lielākā daļa satelītu bibliotēku, piemēram, schm-translate, schm-computed un schm-mongo.

Mēs tagad runāsim par vienu no viņiem.

Vārdu atslēgu pārdēvēšana

schm-translate ir viena no vienkāršākajām, tomēr jaudīgākajām satelītu bibliotēkām schm. Tās ir dažas vairāk nekā 10 koda rindas, kas saspiestas vienā funkcijā, kas ļauj tulkot vērtību atslēgas uz jūsu shēmas taustiņiem.

Pieņemsim, ka strādājat ar tīmekļa lietojumprogrammu, kas patērē resursus no REST API. Pēkšņi izstrādātāji maina API darbības, kas liek atbildes pamattekam atgriezt nedaudz atšķirīgu modeli, nekā tas, ko klients gaidīja. emailĪpašuma vietā tas tagad atgriež masīvu emails.

Tas, iespējams, liks jūsu lietotnei pārtraukt. Ja jums nav shēmas vai cita centralizēta veida, kā rīkoties ar šo objektu, jums būs jāatjaunina katra lietojumprogrammas daļa, lai tā atbilstu servera izmaiņām.

Ar schmun schm-translateto var atrisināt, mainot dažas koda rindas tikai vienā vietā:

Rezultāts būs tieši tāds, kādu jūsu lietotne gaidīja pirms izmaiņām:

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

Noklikšķiniet šeit, lai redzētu visu pakotņu sarakstu

Kā tas atšķiras no citām shēmu bibliotēkām?

Parasti jautājums ir atšķirība starp schmcitām bibliotēkām, piemēram, Joi un ajv (kas seko JSON Schema spec).

Salīdzinot ar ajv, schmneievēro nevienu konkrētu specifikāciju. Tā vietā tas mēģina atdarināt Mongoose Schema API. Lai arī ajvtai ir dažas parsēšanas funkcijas, tās aprobežojas ar noklusējuma vērtībām un veida piespiešanu.

Jo schm, spēju parsēt vērtībām, pamatojoties uz shēmu ir tas, kas ļauj pārveidot vaicājuma virknes uz MongoDB vaicājumu, piemēram.

Tas nozīmē, ka abus Joiun ar tiem ajvvar kombinēt schm. To var viegli paplašināt, lai izmantotu citu validācijas metodi:

Paldies, ka izlasījāt šo!

Ja jums tas patīk un šķiet noderīgs, šeit ir dažas lietas, ko varat darīt, lai parādītu savu atbalstu:

  • Trāpīji aplaudēt? poga uz šo rakstu dažas reizes (līdz 50)
  • Uzdāviniet zvaigznīti on️ vietnē GitHub: //github.com/installohaz/schm
  • Seko man vietnē GitHub: //github.com/installohaz
  • Seko man čivināt: //twitter.com/installohaz