Kuinka kirjoittaa tehokkaita skeemejä JavaScriptiin

Esittelyssä schm, toimiva ja erittäin helposti koottava kirjasto skeemojen luomiseen JavaScriptissä ja Node.js: ssä

Olen työskennellyt HTML: n, CSS: n ja JavaScriptin kanssa vuodesta 2002. Ensimmäistä kertaa tarvitsin jonkinlaisen skeeman JavaScriptissä vain muutama vuosi sitten.

Kun olen käyttänyt monia erilaisia ​​kirjastoja ja jopa kirjoittanut toisen ja toisen, olen päättänyt luoda schm: n. Tämä on seurausta kaikesta kokemuksestani JavaScript-skeemeistä.

Mikä on schm?

schm on npm-pakettien ryhmä, joka auttaa kehittäjiä käsittelemään skeemejä JavaScriptissä ja Node.js: ssä.

Se on innostunut Mongoose Schemasista. Itse asiassa ne ovat niin samanlaisia, että voit käyttää schmparametreja Mongoose Schemas -ohjelmassa ja päinvastoin. Se ei kuitenkaan ole MongoDB-spesifinen. Voit käyttää sitä kaikkeen JavaScriptissä.

Millaisia ​​ongelmia schm ratkaisee?

? Lomakearvojen jäsentäminen ja vahvistaminen

Asiakkaalla voit määrittää malleja HTML-lomakkeille mallien avulla. Se helpottaa arvojen muuntamista ja vahvistamista. Jos käytät palvelimella Node.js-tiedostoa, voit käyttää samaa mallia. Tuloksena on johdonmukainen toiminta asiakkaan ja palvelimen vahvistusten välillä.

? Kyselymerkkijonon jäsentäminen ja vahvistaminen

Mieti seuraavia kyselymerkkijonon: /?term=John&page=2&limit=10. Yhdistämällä paketteja, kuten schm-koa, schm-express ja / tai schm-mongo, voit jäsentää ja vahvistaa kyselymerkkijonot hakutermeillä ja sivutuksella helposti.

☊ Asiakkaan ja palvelimen välinen tiedonsiirto

Jos sinulla on sovellus, joka kuluttaa resursseja esimerkiksi REST-sovellusliittymästä, voit määrittää skeemien avulla asiakkaalle objektirakenteen, jonka asiakas odottaa saavansa palvelimelta. Jos palvelimessa jotain muuttuu (esimerkiksi ominaisuudet on nimetty uudelleen), voit vain päivittää mallisi, jotta koko sovelluksesi toimii edelleen.

Kaavion luominen

Yksinkertainen malli on vain kartta avaimista ja tyypeistä:

Se on sama kuin typeomaisuuden käyttö:

Kaavio voi olla myös kartta avainten ja oletusarvojen välillä. Tyypit päätetään automaattisesti:

Se vastaa seuraavien tekoa:

Jos haluat lisätietoja skeemojen kirjoittamisesta, katso Mongoose Schemas.

Jäsennysarvot

Kun olet määrittänyt mallin, voit käyttää sitä jäsentää arvoja. Tämä prosessi muuntaa arvot oikeiksi tyypeiksi sekä soveltaa muita skeemassa määriteltyjä jäsentimiä. Nämä ovat saatavissa jäsentimiä: type, default, set, get, trim, uppercase, lowercase.

Tulos on jotain tällaista:

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

Vahvistetaan arvoja

Aivan kuten Mongoose-skeemeissä, voit määritellä validointisäännöt skeemeissäsi. Nämä ovat saatavissa validators: validate, required, match, enum, max, min, maxlength, minlength.

Voit myös luoda mukautettuja jäsentimiä ja vahvistimia laajentamalla mallia. Puhumme siitä myöhemmin tässä artikkelissa.

Vahvistusvirhe on oletusarvo joukko objekteja, jotka kuvaavat virheitä.

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

Jos vahvistus läpäisee, se palauttaa jäsennetyt arvot aivan kuten parse().

Useiden kaavojen luominen

Oletetaan, että sinulla on erilliset kaavat, jotka kuvaavat a body: ta identityja muita asioita, ja haluat luoda ne rakentamaan humanskeeman. Se on yhtä helppoa kuin miltä se kuulostaa:

Toinen tapa luoda skeemejä on pesiminen. Kaaviota voidaan käyttää typetoisen skeeman sisällä:

Kaavojen laajentaminen

Tämä on osa, joka schmtodella loistaa. Voit lisätä mukautettuja jäsentimiä ja vahvistimia tai jopa korvata oletusarvoisen käyttäytymisen parseja validatemenetelmät luomalla kaavaryhmiä.

Skeema ryhmä on toiminto, joka vastaanottaa edellisessä kaava ainoana argumentti. Lisäksi edellinen params, parsersja validators, skeema esine on mergemenetelmä, joka on käyttökelpoinen skeema ryhmä toiminnot yhdistää uusia toimintoja osaksi edellisen kaavioita.

Yllä olevan katkelman tulos on jotain tällaista:

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

Jos haluat mennä pidemmälle ja oppia lisää mukautettujen jäsentäjien luomisesta, tutustu siihen, miten jäsentäjät kirjoitetaan ydinkirjaston sisällä.

Laajentamalla skeemejä voimme luoda monenlaisia ​​asioita. Siten suurin osa schmsatelliittikirjastoista, kuten schm-translate, schm-computed ja schm-mongo, kirjoitetaan.

Aiomme puhua yhdestä heistä nyt.

Arvonäppäinten uudelleennimeäminen

schm-translate on yksi yksinkertaisimmista, mutta tehokkaimmista satelliittikirjastoista schm. Se on muutama yli 10 koodiriviä, jotka on pakattu yhdeksi toiminnoksi, jonka avulla voit kääntää arvoavaimet skeema-avaimiin.

Oletetaan, että työskentelet verkkosovelluksen kanssa, joka kuluttaa resursseja REST-sovellusliittymästä. Yhtäkkiä kehittäjät muuttavat API: n asioita, mikä saa vastausrungon palauttamaan hieman erilaisen mallin kuin asiakas odotti. emailOminaisuuden sijaan se palauttaa nyt joukon emails.

Tämä saa sovelluksesi todennäköisesti rikkoutumaan. Jos sinulla ei ole mallia tai muuta keskitettyä tapaa käsitellä kyseistä objektia, sinun on päivitettävä kaikki sovelluksen osat vastaamaan palvelimen muutoksia.

Painikkeella schmja schm-translatese voidaan ratkaista muuttamalla muutama koodirivi yhdessä paikassa:

Tulos on täsmälleen se, jonka sovelluksesi odottaa ennen muutosta:

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

Napsauta tätä nähdäksesi luettelon kaikista paketeista

Kuinka tämä eroaa muista skeemakirjastoista?

Yleinen kysymys on ero schmkirjastojen, kuten Joi ja ajv, välillä (mikä seuraa JSON Schema -määritystä).

Verrattuna ajv, schmei noudata mitään erityisiä tietoja. Sen sijaan se yrittää jäljitellä Mongoose Schema -sovellusliittymää. Vaikka niillä ajvon joitain jäsennysominaisuuksia, ne rajoittuvat oletusarvoihin ja tyypin pakottamiseen.

Sisään schmkyky jäsentää arvot skeeman perusteella on se, mikä mahdollistaa kyselymerkkijonon muuntamisen esimerkiksi MongoDB-kyselyksi.

Se sanoi, molemmat Joija ajvvoidaan yhdistää schm. Voit helposti laajentaa sitä käyttämään eri vahvistusmenetelmää:

Kiitos, että luet tämän!

Jos pidät siitä ja pidät siitä hyödyllisenä, tässä on joitain asioita, joita voit tehdä osoittaaksesi tukesi:

  • Oliko taputus? -painike tässä artikkelissa muutaman kerran (enintään 50)
  • Anna tähti ⭐️ GitHubissa: //github.com/installohaz/schm
  • Seuraa minua GitHubissa: //github.com/installohaz
  • Seuraa minua Twitterissä: //twitter.com/installohaz