Hogyan írhatunk hatékony sémákat JavaScript-be

Bemutatjuk a schm-et, egy funkcionális és jól összeállítható könyvtárat a sémák létrehozásához a JavaScript-ben és a Node.js-ben

2002 óta dolgozom HTML, CSS és JavaScript programokkal. Először csak néhány évvel ezelőtt volt szükségem valamiféle sémára a JavaScript-ben.

Miután sok különböző könyvtárat használtam, és még szerződtem is egyet, meg úgy döntöttem, hogy létrehozok egy schm-et. Ez az összes tapasztalatom eredménye a JavaScript-ben szereplő sémákkal kapcsolatban.

Mi az a schm?

schm az npm csomagok csoportja, amelyek segítenek a fejlesztőknek a JavaScript és a Node.js sémáinak kezelésében.

Nagyon inspirálta a Mongoose Schemas. Valójában annyira hasonlítanak egymásra, hogy schmparamétereket használhat a Mongoose Schemes-en belül és fordítva. Ez azonban nem a MongoDB specifikus. A JavaScript-ben mindenre felhasználhatja.

Milyen problémákat old meg az schm?

? Az űrlapértékek elemzése és érvényesítése

Az ügyfélen sémák segítségével definiálhat modelleket a HTML-űrlapokhoz. Ez megkönnyíti az értékek átalakítását és érvényesítését. Továbbá, ha a Node.js fájlt használja a szerveren, használhatja ugyanazt a sémát. Az eredmény következetes viselkedés az ügyfél és a kiszolgáló ellenőrzése között.

? A lekérdezési karakterlánc elemzése és érvényesítése

Tekintsük a következő lekérdezési karakterlánc: /?term=John&page=2&limit=10. Az olyan csomagok kombinálásával, mint a schm-koa, a schm-express és / vagy a schm-mongo, könnyedén elemezheti és érvényesítheti a lekérdezési karakterláncokat keresési kifejezésekkel és lapozással.

☊ Kommunikáció az ügyfél és a szerver között

Ha például van olyan alkalmazása, amely egy REST API-ból vesz fel erőforrásokat, akkor sémák segítségével meghatározhatja az ügyfélen azt az objektumstruktúrát, amelyet az ügyfél a kiszolgálótól várhat. Ha valami megváltozik a szerveren (például a tulajdonságokat átnevezték), akkor egyszerűen frissítse a sémát, így a teljes alkalmazás továbbra is működik.

Séma létrehozása

Az egyszerű séma csak a kulcsok és típusok térképe:

Ez megegyezik egy typetulajdonság használatával:

A séma térkép is lehet a kulcsok és az alapértelmezett értékek között. A típusok automatikusan következtetésre kerülnek:

Ez egyenértékű a következők elvégzésével:

Ha többet szeretne megtudni a sémák írásáról, tekintse meg a Mongoose sémákat.

Értékek elemzése

A séma definiálása után felhasználhatja értékek elemzésére. Ez a folyamat átalakítja az értékeket a megfelelő típusokká, valamint más, a sémában definiált elemzőket is alkalmaz. Ezek a rendelkezésre álló értelmezők: type, default, set, get, trim, uppercase, lowercase.

A kimenet valami ilyesmi lesz:

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

Értékek érvényesítése

A Mongoose sémákhoz hasonlóan a sémákon belül is meghatározhat érvényesítési szabályokat. Ezek a rendelkezésre álló érvényesítő: validate, required, match, enum, max, min, maxlength, minlength.

A séma kiterjesztésével egyéni elemzőket és validátorokat is létrehozhat. Beszélünk róla később ebben a cikkben.

Az érvényesítési hiba alapértelmezés szerint a hibákat leíró objektumok tömbje lesz.

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

Ha az érvényesítés sikeres, akkor az elemzett értékeket adja vissza, akárcsak parse().

Több séma összeállítása

Tegyük fel, hogy külön sémáink vannak, amelyek leírják az a body-t identityés egyéb dolgokat, és össze akarják állítani őket egy humanséma felépítéséhez . Ez olyan egyszerű, mint amilyennek hangzik:

A sémák összeállításának másik módja a fészkelés. Egy séma használható egy typemásik sémán belül:

Sémák kiterjesztése

Ez az a rész, ahol schmigazán ragyog. Hozzáadhat egyéni elemzőket és ellenőrzőket, vagy akár sémacsoportok létrehozásával lecserélheti az alapértelmezett viselkedést parseés validatemódszereket.

A sémacsoport olyan függvény, amely az előző sémát fogadja el egyetlen argumentumként. Emellett a korábbi params, parsersés validatorsa séma objektumnak van egy mergemódszer, ami hasznos lehet séma csoport funkciók egyesítése új funkciókat a korábbi sémákat.

A fenti kivonat kimenete valami ilyesmi lesz:

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

Ha tovább szeretne menni, és többet szeretne megtudni az egyéni elemzők létrehozásáról, akkor nézze meg, hogyan íródnak a parserek a központi könyvtárban.

A sémák kiterjesztésével sokféle dolgot hozhatunk létre. Így schmíródik a legtöbb műholdas könyvtár, például a schm-translate, a schm-számított és a schm-mongo.

Most egyikükről fogunk beszélni.

Értékkulcsok átnevezése

A schm-translate az egyik legegyszerűbb, mégis hatékony műholdas könyvtár schm. Néhány több, mint 10 kódsor egyetlen funkcióba tömörítve, amely lehetővé teszi az értékkulcsok sémakulcsokká történő lefordítását.

Tegyük fel, hogy egy webalkalmazáson dolgozik, amely egy REST API erőforrásait emészti fel. Hirtelen a fejlesztők megváltoztatják a dolgokat az API-n, ami miatt a válasz test kissé más modellt ad vissza, mint amit az ügyfél várt. emailTulajdonság helyett most egy tömböt ad vissza emails.

Ez valószínűleg tönkre fogja tenni az alkalmazását. Ha nincs sémája vagy bármilyen más központosított módja az objektum kezelésének, akkor frissítenie kell az alkalmazás minden részét, hogy megfeleljen a szerver változásainak.

A schmés schm-translatesegítségével megoldható néhány kódsor egyetlen helyen történő megváltoztatásával:

A kimenet pontosan az lesz, amelyet az alkalmazás várt a változás előtt:

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

Kattintson ide az összes csomag listájának megtekintéséhez

Miben különbözik ez más séma könyvtáraktól?

Gyakori kérdés a különbség a schmtöbbi könyvtár, például a Joi és az ajv között (ami a JSON Schema specifikációt követi).

Összehasonlítva a ajv, schmnem követi különösebb specifikációt. Ehelyett megpróbálja utánozni a Mongoose Schema API-t. Annak ellenére, hogy ajvvan néhány elemzési funkciója, ezek az alapértelmezett értékekre és a típusú kényszerre korlátozódnak.

Az schmértékek séma alapján történő elemzésének képessége lehetővé teszi egy lekérdezési karakterlánc átalakítását például MongoDB lekérdezéssé.

Ez azt jelenti, hogy mindkettő Joiés ajvkombinálható velük schm. Könnyen kiterjesztheti egy másik érvényesítési módszer használatával:

Köszönjük, hogy elolvasta ezt!

Ha tetszik és hasznosnak találja, íme néhány dolog, amit tehet a támogatása iránt:

  • Megütni a tapsot? gomb erre a cikkre néhányszor (legfeljebb 50)
  • Adj csillagot ⭐️ a GitHub-on: //github.com/installohaz/schm
  • Kövessen engem a GitHubon: //github.com/diegohaz
  • Kövess engem a Twitteren: //twitter.com/installohaz