Predstavljamo schm, funkcionalnu i visoko komponibilnu biblioteku za stvaranje shema u JavaScript-u i Node.js-u

S HTML-om, CSS-om i JavaScriptom radim od 2002. Prvi put mi je trebala neka vrsta sheme u JavaScript-u prije samo nekoliko godina.
Nakon što sam koristio mnogo različitih knjižnica, pa čak i autor jedne i druge, odlučio sam stvoriti schm. To je rezultat sveg mog iskustva sa shemama u JavaScript-u.
Što je schm?
schm
je grupa npm paketa koji pomažu programerima da se bave shemama u JavaScriptu i Node.js.
Iznimno je nadahnut Mongoose Shemama. Zapravo, toliko su slični da možete koristiti schm
parametre unutar Mongoose Shema i obrnuto. Ipak, to nije specifično za MongoDB. Možete ga koristiti za sve u JavaScript-u.
Kakve probleme rješava schm?
? Raščlanjivanje i provjera vrijednosti oblika
Na klijentu možete koristiti sheme za definiranje modela za HTML obrasce. Olakšava transformiranje i provjeru vrijednosti. Također, ako na poslužitelju koristite Node.js, možete koristiti istu shemu. Rezultat je dosljedno ponašanje između provjere valjanosti klijenta i poslužitelja.
? Raščlanjivanje i provjera niza upita
Razmislite o sljedećem upitu: /?term=John&page=2&limit=10
. Kombinacijom paketa kao što su schm-koa, schm-express i / ili schm-mongo, moći ćete s lakoćom raščlaniti i provjeriti nizove upita s pojmovima za pretraživanje i paginacijom.
☊ Komunikacija između klijenta i poslužitelja
Ako, na primjer, imate aplikaciju koja troši resurse iz REST API-ja, pomoću shema možete na klijentu definirati strukturu objekta koju vaš klijent očekuje od poslužitelja. Ako se nešto promijeni na poslužitelju (svojstva su, na primjer, preimenovana), možete jednostavno ažurirati svoju shemu tako da će cijela vaša aplikacija nastaviti raditi.
Izrada sheme
Jednostavna shema samo je karta ključeva i vrsta:
To je isto kao i korištenje type
svojstva:
Shema također može biti karta između ključeva i zadanih vrijednosti. Vrste će se automatski zaključiti:
To je ekvivalentno sljedećem:
Da biste saznali više o tome kako pisati sheme, pogledajte Mongoose Schemas.
Raščlanjivanje vrijednosti
Nakon definiranja sheme, pomoću nje možete raščlaniti vrijednosti. Ovaj će postupak pretvoriti vrijednosti u odgovarajuće tipove, kao i primjenom ostalih analizatora definiranih u shemi. To su dostupni parsera: type
, default
, set
, get
, trim
, uppercase
, lowercase
.
Rezultat će biti otprilike ovako:
{ name: "HAZ", birthdate: Tue Apr 10 1990 00:00:00 GMT,}
Provjera vrijednosti
Baš kao u Mongoose Shemama, i unutar svojih shema možete definirati pravila provjere valjanosti. To su dostupni za provjeru koje: validate
, required
, match
, enum
, max
, min
, maxlength
, minlength
.
Također možete stvoriti prilagođene raščlanjivače i validatore proširivanjem sheme. O tome ćemo kasnije u ovom članku.
Pogreška provjere valjanosti bit će prema zadanim postavkama niz objekata koji opisuju pogreške.
[ { message: "age must be greater than or equal 18", min: 18, param: "age", validator: "min", value: 17, }]
Ako validacija prođe, vratit će se raščlanjene vrijednosti, baš kao i parse()
.
Sastavljanje više shema
Recimo da imate odvojene sheme opisivanja body
, identity
i druge stvari, i želite ih sastaviti izgraditi human
shemu. To je tako lako koliko zvuči:
Drugi način za sastavljanje shema je gniježđenje. Shema se može koristiti kao type
unutar druge sheme:
Proširivanje shema
Ovo je dio u kojem schm
stvarno svijetli. Možete dodati prilagođene parsere i validatore ili čak zamijeniti zadano ponašanje parse
i validate
metode stvaranjem grupa shema.
Skupina sheme je funkcija koja prima prethodnu shemu kao jedini argument. Osim prethodnih params
, parsers
i validators
, objekt sheme ima merge
metodu koja je korisna za funkcije grupa shema za spajanje nove funkcionalnosti u prethodne sheme.
Rezultat gornjeg isječka bit će otprilike ovako:
{ name: "Haz!!!", age: 27,}
Ako želite ići dalje i naučiti više o tome kako stvoriti prilagođene raščlanjivače, pogledajte kako su ovdje napisani parseri unutar osnovne knjižnice.
Proširivanjem shema možemo stvoriti mnoge vrste stvari. Tako je schm
napisana većina satelitskih knjižnica, poput schm-translate, schm-computed i schm-mongo.
Sad ćemo razgovarati o jednom od njih.
Preimenovanje ključeva vrijednosti
schm-translate je jedna od najjednostavnijih, a istovremeno moćnih satelitskih knjižnica schm
. To je nekoliko više od 10 redaka koda komprimiranog u jednu funkciju koja vam omogućuje prevođenje ključeva vrijednosti u vaše ključeve sheme.
Recimo da radite na web aplikaciji koja troši resurse iz REST API-ja. Odjednom, programeri mijenjaju stvari na API-ju, što čini da tijelo odgovora vraća malo drugačiji model od onog koji je klijent očekivao. Umjesto email
svojstva, sada vraća niz od emails
.
Zbog toga će se aplikacija vjerojatno pokvariti. Ako nemate shemu ili bilo koji drugi centralizirani način za rukovanje tim objektom, morat ćete ažurirati svaki dio aplikacije kako bi se prilagodio promjenama na poslužitelju.
Pomoću schm
i schm-translate
, to se može riješiti promjenom nekoliko redaka koda na samo jednom mjestu:
Rezultat će biti točno onaj koji je vaša aplikacija očekivala prije promjene:
{ name: "Haz", email: "[email protected]",}
Kliknite ovdje da biste vidjeli popis svih paketa
Po čemu se ovo razlikuje od ostalih knjižnica shema?
Često je pitanje razlika između schm
i drugih knjižnica, poput Joi i ajv (koja slijedi specifikacije JSON sheme).
U usporedbi s ajv
, schm
ne slijedi neke posebne specifikacije. Umjesto toga, pokušava oponašati API sheme Mongoose. Također, iako ajv
ima neke značajke raščlanjivanja, ograničene su na zadane vrijednosti i prisilu tipa.
U schm
, sposobnost raščlanjivanja vrijednosti na temelju sheme je ono što omogućuje transformiranje niza upita u MongoDB upit, na primjer.
To znači, oboje Joi
i ajv
može se kombinirati s schm
. Možete ga jednostavno proširiti tako da koristi drugu metodu provjere valjanosti:
Hvala vam što ste ovo pročitali!
Ako vam se sviđa i smatra vam korisnim, evo nekoliko stvari koje možete učiniti da biste pokazali svoju podršku:
- Udario pljesak? gumb na ovom članku nekoliko puta (do 50)
- Dajte zvjezdicu ⭐️ na GitHubu: //github.com/diegohaz/schm
- Slijedite me na GitHub-u: //github.com/diegohaz
- Slijedite me na Twitteru: //twitter.com/diegohaz