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 schm
parametre 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 type
lastnosti:
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
, identity
in druge stvari, in želim, da jih sestavite zgraditi human
shemo. To je tako enostavno, kot se sliši:
Drug način za sestavljanje shem je gnezdenje. Shemo lahko uporabimo kot type
znotraj druge sheme:
Razširitev shem
To je del, ki schm
resnično sije. Dodate lahko razčlenjevalnike in preverjevalnike po meri ali celo nadomestite privzeto vedenje parse
in validate
metode z ustvarjanjem skupin shem.
Skupina shem je funkcija, ki prejme prejšnjo shemo kot edini argument. Poleg prejšnje params
, parsers
in validators
, shema objekt je merge
metoda, 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 schm
napisana 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 email
lastnosti 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 schm
in schm-translate
je 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 schm
drugimi knjižnicami, kot sta Joi in ajv (ki sledi specifikacijam sheme JSON).
V primerjavi s ajv
, schm
ne sledi nobene posebne specifikacije. Namesto tega poskuša posnemati API sheme Mongoose. Čeprav ajv
imajo 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 Joi
in ajv
se 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