Kako napisati zmogljive sheme v JavaScript

Predstavljamo vam schm, funkcionalno in zelo komponirano knjižnico za ustvarjanje shem v JavaScript in Node.js

S HTML-jem, CSS-jem in JavaScriptom delam od leta 2002. Prvič sem potreboval nekakšno shemo v JavaScript-u pred nekaj leti.

Po uporabi številnih različnih knjižnic in celo pisanju ene in druge sem se odločil ustvariti schm. To je rezultat vseh mojih izkušenj s shemami v JavaScript.

Kaj je schm?

schm je skupina paketov npm, ki razvijalcem pomagajo pri obravnavi shem v JavaScript in Node.js.

Navdihuje ga Mongoose Schemas. Pravzaprav so si tako podobni, da lahko uporabljate schmparametre v shemah Mongoose in obratno. Vendar to ni specifično za MongoDB. Uporabite ga lahko za vse v JavaScript.

Kakšne težave rešuje schm?

? Razčlenjevanje in preverjanje vrednosti obrazca

V odjemalcu lahko s shemami definirate modele za obrazce HTML. Olajša preoblikovanje in preverjanje vrednosti. Če na strežniku uporabljate Node.js, lahko uporabite isto shemo. Rezultat je dosledno vedenje med validacijo odjemalca in strežnika.

? Razčlenjevanje in preverjanje niza poizvedbe

Razmislite o naslednji poizvedbi: /?term=John&page=2&limit=10. S kombiniranjem paketov, kot so schm-koa, schm-express in / ali schm-mongo, boste lahko z lahkoto razčlenili in potrdili nize poizvedb z iskalnimi izrazi in paginacijo.

☊ Komunikacija med odjemalcem in strežnikom

Če imate na primer aplikacijo, ki porablja vire iz API-ja REST, lahko s shemami na odjemalcu določite strukturo objektov, ki jo pričakuje, da jo bo odjemalec prejel od strežnika. Če se na strežniku kaj spremeni (lastnosti so bile na primer preimenovane), lahko samo posodobite svojo shemo, tako da bo celotna aplikacija še naprej delovala.

Ustvarjanje sheme

Preprosta shema je le zemljevid tipk in vrst:

To je enako kot pri uporabi typelastnosti:

Shema je lahko tudi zemljevid med ključi in privzetimi vrednostmi. Vrste bodo samodejno sklepane:

To je enakovredno temu:

Če želite izvedeti več o pisanju shem, si oglejte Mongoose Schemas.

Razčlenitev vrednosti

Ko definirate shemo, jo lahko uporabite za razčlenitev vrednosti. Ta postopek bo pretvoril vrednosti v ustrezne tipe in uporabil druge razčlenjevalnike, definirane v shemi. To so na voljo razpoznavalniki: type, default, set, get, trim, uppercase, lowercase.

Rezultat bo približno tak:

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

Preverjanje vrednosti

Tako kot v shemah Mongoose lahko tudi v svojih shemah določite pravila preverjanja veljavnosti. To so na voljo potrjevalci: validate, required, match, enum, max, min, maxlength, minlength.

Razširitve sheme lahko ustvarite tudi po meri in razčlenjevalnike po meri. O tem bomo govorili kasneje v tem članku.

Napaka pri preverjanju veljavnosti bo privzeto vrsta predmetov, ki opisujejo napake.

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

Če preverjanje velja, bo vrnilo razčlenjene vrednosti, tako kot parse().

Sestavljanje več shem

Recimo, da imate ločene sheme, ki opisujejo body, identityin druge stvari, in želim, da jih sestavite zgraditi humanshemo. To je tako enostavno, kot se sliši:

Drug način za sestavljanje shem je gnezdenje. Shemo lahko uporabimo kot typeznotraj druge sheme:

Razširitev shem

To je del, ki schmresnično sije. Dodate lahko razčlenjevalnike in preverjevalnike po meri ali celo nadomestite privzeto vedenje parsein validatemetode z ustvarjanjem skupin shem.

Skupina shem je funkcija, ki prejme prejšnjo shemo kot edini argument. Poleg prejšnje params, parsersin validators, shema objekt je mergemetoda, ki je uporabna za funkcije shema skupine za združitev nove funkcionalnosti v prejšnjih shemah.

Rezultat zgornjega delčka bo približno tak:

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

Če želite nadaljevati in izvedeti več o tem, kako ustvariti razčlenjevalnike po meri, si oglejte, kako so razčlenjevalniki zapisani v osnovni knjižnici tukaj.

Z razširitvijo shem lahko ustvarimo številne stvari. Tako je schmnapisana večina satelitskih knjižnic, kot so schm-translate, schm-computed in schm-mongo.

Zdaj se bomo pogovorili o enem od njih.

Preimenovanje ključev vrednosti

schm-translate je ena najpreprostejših, a hkrati zmogljivih satelitskih knjižnic schm. To je nekaj več kot 10 vrstic kode, stisnjenih v eno funkcijo, ki vam omogoča prevajanje ključev vrednosti v ključe sheme.

Recimo, da delate na spletnem mestu, ki porablja vire iz API-ja REST. Nenadoma razvijalci spremenijo stvari v API-ju, zaradi česar odzivni organ vrne nekoliko drugačen model, kot ga je pričakovala stranka. Namesto emaillastnosti zdaj vrne polje emails.

Zaradi tega se bo aplikacija verjetno pokvarila. Če nimate sheme ali katerega koli drugega centraliziranega načina za obdelavo tega predmeta, boste morali posodobiti vsak del aplikacije, da bo v skladu s spremembami strežnika.

Z schmin schm-translateje mogoče rešiti tako, da spremenite nekaj vrstic kode na enem mestu:

Rezultat bo natančno takšen, kot ga je vaša aplikacija pričakovala pred spremembo:

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

Kliknite tukaj, da si ogledate seznam vseh paketov

V čem se to razlikuje od drugih knjižnic shem?

Pogosto vprašanje je razlika med schmdrugimi knjižnicami, kot sta Joi in ajv (ki sledi specifikacijam sheme JSON).

V primerjavi s ajv, schmne sledi nobene posebne specifikacije. Namesto tega poskuša posnemati API sheme Mongoose. Čeprav ajvimajo nekatere funkcije razčlenjevanja, so omejene na privzete vrednosti in prisilo tipa.

V schm, sposobnost razčleniti vrednosti, ki temelji na shemi je tisto, kar je mogoče preoblikovati poizvedbi v MongoDB poizvedbo, na primer.

To je dejal, tako Joiin ajvse lahko kombinirajo s schm. Z lahkoto ga lahko razširite na drugačen način preverjanja veljavnosti:

Hvala, ker ste to prebrali!

Če vam je všeč in se vam zdi koristen, lahko nekaj pokažete v podporo:

  • Zadel ploskanje? na tem članku nekajkrat (do 50)
  • Dajte zvezdico ⭐️ na GitHubu: //github.com/diegohaz/schm
  • Sledite mi na GitHub: //github.com/diegohaz
  • Sledite mi na Twitterju: //twitter.com/diegohaz