Kaip parašyti galingas schemas „JavaScript“

Pristatome schm - funkcionalią ir labai sudėtingą biblioteką, skirtą schemoms kurti „JavaScript“ ir „Node.js“

Dirbu su HTML, CSS ir „JavaScript“ nuo 2002 m. Pirmą kartą kažkokios schemos „JavaScript“ prireikė tik prieš keletą metų.

Panaudojęs daugybę skirtingų bibliotekų ir net sukūręs vieną ir kitą, nusprendžiau sukurti schm. Tai visos mano patirties, susijusios su „JavaScript“ schemomis, rezultatas.

Kas yra schm?

schm yra npm paketų grupė, padedanti kūrėjams susidoroti su „JavaScript“ ir „Node.js“ schemomis.

Tai labai įkvėpė „Mongoose Schemas“. Tiesą sakant, jie yra tokie panašūs, kad galite naudoti schmparametrus „Mongoose Schemas“ ir atvirkščiai. Vis dėlto tai nėra specifinė „MongoDB“. Galite naudoti viską „JavaScript“.

Kokias problemas sprendžia schm?

? Formos reikšmių analizavimas ir patvirtinimas

Klientui galite naudoti schemas, kad apibrėžtumėte HTML formų modelius. Tai leidžia lengviau transformuoti ir patvirtinti vertes. Be to, jei serveryje naudojate „Node.js“, galite naudoti tą pačią schemą. Rezultatas yra nuoseklus kliento ir serverio patvirtinimo elgesys.

? Analizuojamas ir patvirtinamas užklausos eilutė

Apsvarstykite šį užklausos eilutę: /?term=John&page=2&limit=10. Sujungę paketus, tokius kaip schm-koa, schm-express ir (arba) schm-mongo, galėsite lengvai analizuoti ir patvirtinti užklausos eilutes su paieškos terminais ir puslapiais.

☊ Kliento ir serverio bendravimas

Pavyzdžiui, jei turite programą, kuri sunaudoja iš REST API išteklius, galite naudoti schemas, kad kliente apibrėžtumėte objekto struktūrą, kurią klientas tikisi gauti iš serverio. Jei serveryje kažkas pasikeičia (pavyzdžiui, ypatybės buvo pervadintos), galite tiesiog atnaujinti schemą, kad visa jūsų programa toliau veiktų.

Schemos kūrimas

Paprasta schema yra tik raktų ir tipų žemėlapis:

Tai tas pats, kas naudoti typenuosavybę:

Schema taip pat gali būti žemėlapis tarp raktų ir numatytųjų reikšmių. Tipai bus nustatomi automatiškai:

Tai tolygu šių veiksmų atlikimui:

Norėdami sužinoti daugiau apie tai, kaip rašyti schemas, pažvelkite į „Mongoose Schemas“.

Analizuojamos vertės

Apibrėžę schemą, galite ją naudoti analizuodami vertes. Šis procesas reikšmes pavers tinkamais tipais ir pritaikys kitus schemoje apibrėžtus analizatorius. Tai yra laisvų analizatoriai: type, default, set, get, trim, uppercase, lowercase.

Išvestis bus maždaug tokia:

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

Patvirtinamos vertės

Kaip ir „Mongoose Schemas“, savo schemose galite apibrėžti patvirtinimo taisykles. Tai yra laisvų tvirtintojai: validate, required, match, enum, max, min, maxlength, minlength.

Taip pat galite sukurti pasirinktinius analizatorius ir tikrintuvus, išplėsdami schemą. Apie tai pakalbėsime vėliau šiame straipsnyje.

Patvirtinimo klaida pagal numatytuosius nustatymus bus objektų masyvas, apibūdinantis klaidas.

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

Jei patvirtinimas praeis, jis grąžins išanalizuotas reikšmes, kaip ir parse().

Sudaryti kelias schemas

Tarkime, jūs turite atskiras schemas apibūdinimas body, identityir kitus dalykus, ir nori kurti juos statyti humanschema. Tai taip lengva, kaip atrodo:

Kitas schemų sudarymo būdas yra perėjimas. Schema gali būti naudojama kaip typekita schema:

Schemų pratęsimas

Tai ta dalis, kur schmtikrai šviečia. Galite pridėti pasirinktinių analizatorių ir tikrintuvų arba net pakeisti numatytąjį elgesį parseir validatemetodus, sukurdami schemų grupes.

Schemos grupė yra funkcija, kuri gauna ankstesnę schemą, kaip vienintelis argumentas. Be to, ankstesnis params, parsersir validators, Schema objektas turi mergemetodą, kuris yra naudinga schemos grupė funkcijos sujungti naują funkcionalumą į ankstesnių schemų.

Ankstesnio fragmento išvestis bus maždaug tokia:

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

Jei norite eiti toliau ir sužinoti daugiau apie tai, kaip sukurti pasirinktinius analizatorius, pažiūrėkite, kaip analizatoriai rašomi pagrindinėje bibliotekoje.

Išplėsdami schemas, galime sukurti daugybę dalykų. Taip schmrašoma dauguma palydovinių bibliotekų, tokių kaip „schm-translate“, „schm-computed“ ir „schm-mongo“.

Mes dabar kalbėsime apie vieną iš jų.

Vertybių raktų pervadinimas

„schm-translate“ yra viena iš paprasčiausių, tačiau galingų palydovinių bibliotekų schm. Tai yra keletas daugiau nei 10 kodų eilučių, suspaustų į vieną funkciją, kuri leidžia versti reikšmių raktus į schemos raktus.

Tarkime, kad dirbate su žiniatinklio programa, kuri sunaudoja REST API išteklius. Staiga kūrėjai pakeičia API dalykus, todėl atsakymo įstaiga pateikia šiek tiek kitokį modelį, nei tikėjosi klientas. Vietoj ypatybės emailjis dabar grąžina masyvą emails.

Tai tikriausiai privers jūsų programą sugadinti. Jei neturite schemos ar bet kokio kito centralizuoto būdo tvarkyti tą objektą, turėsite atnaujinti kiekvieną programos dalį, kad ji atitiktų serverio pakeitimus.

Naudojant schmir schm-translate, tai galima išspręsti pakeitus kelias kodo eilutes vienoje vietoje:

Išvestis bus tiksliai ta, kurios jūsų programa tikėjosi prieš pakeitimą:

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

Norėdami pamatyti visų paketų sąrašą, spustelėkite čia

Kuo tai skiriasi nuo kitų schemų bibliotekų?

Dažnas klausimas yra skirtumas tarp schmkitų bibliotekų, tokių kaip Joi ir ajv (kuris seka JSON Schema specifikacijomis).

Palyginus ajv, schmnesilaikoma jokių konkrečių specifikacijų. Vietoj to bandoma imituoti „Mongoose Schema“ API. Be to, nors ir ajvyra tam tikrų analizavimo funkcijų, jos ribojamos numatytosiomis vertėmis ir tipo prievarta.

Be schm, gebėjimas apdoroti vertybių remiantis schema, kas daro jį galima transformuoti užklausos eilutę į MongoDB užklausą, pvz.

Beje, abu Joisu jais ajvgali būti derinami schm. Galite lengvai jį išplėsti, naudodami kitą patvirtinimo metodą:

Ačiū, kad perskaitėte tai!

Jei jums tai patinka ir atrodo naudinga, pateikite keletą dalykų, kuriuos galite padaryti, kad parodytumėte savo palaikymą:

  • Paspausti plojimą? kelis kartus mygtukas šiame straipsnyje (iki 50)
  • Padovanok žvaigždę ⭐️ „GitHub“: //github.com/installohaz/schm
  • Sekite mane „GitHub“: //github.com/diegohaz
  • Sekite mane „Twitter“: //twitter.com/installohaz