Cara menulis skema hebat dalam JavaScript

Memperkenalkan schm, perpustakaan yang berfungsi dan sangat komposit untuk membuat skema dalam JavaScript dan Node.js

Saya telah bekerja dengan HTML, CSS, dan JavaScript sejak tahun 2002. Kali pertama saya memerlukan semacam skema dalam JavaScript adalah beberapa tahun yang lalu.

Setelah menggunakan banyak perpustakaan yang berbeza dan bahkan mengarang satu sama lain, saya memutuskan untuk membuat schm. Itulah hasil dari semua pengalaman saya dengan skema dalam JavaScript.

Apa itu schm?

schm adalah sekumpulan pakej npm untuk membantu pembangun menangani skema dalam JavaScript dan Node.js.

Ia sangat diilhamkan oleh Mongoose Schemas. Sebenarnya, ia sangat serupa sehingga anda dapat menggunakan schmparameter dalam Mongoose Schemas dan sebaliknya. Walau bagaimanapun, ia tidak khusus untuk MongoDB. Anda boleh menggunakannya untuk semua perkara dalam JavaScript.

Masalah apa yang diselesaikan oleh schm?

? Menghuraikan dan mengesahkan nilai bentuk

Pada pelanggan, anda boleh menggunakan skema untuk menentukan model untuk bentuk HTML. Ini menjadikannya lebih mudah untuk mengubah dan mengesahkan nilai. Sekiranya anda menggunakan Node.js di pelayan, anda boleh menggunakan skema yang sama. Hasilnya adalah tingkah laku yang konsisten antara pengesahan klien dan pelayan.

? Menghuraikan dan mengesahkan rentetan pertanyaan

Pertimbangkan rentetan pertanyaan berikut: /?term=John&page=2&limit=10. Dengan menggabungkan pakej seperti schm-koa, schm-express dan / atau schm-mongo, anda akan dapat menguraikan dan mengesahkan rentetan pertanyaan dengan istilah carian dan penomboran dengan mudah.

☊ Komunikasi antara pelanggan dan pelayan

Sekiranya anda mempunyai aplikasi yang menggunakan sumber daya dari REST API, misalnya, anda dapat menggunakan skema untuk menentukan, pada klien, struktur objek yang diharapkan pelanggan anda terima dari pelayan. Sekiranya ada perubahan pada pelayan (contohnya sifatnya telah diganti namanya), anda hanya boleh mengemas kini skema anda sehingga keseluruhan aplikasi anda akan terus berfungsi.

Membuat skema

Skema ringkas hanyalah peta kunci dan jenis:

Sama seperti menggunakan typeharta tanah:

Skema juga boleh menjadi peta antara kunci dan nilai lalai. Jenis akan disimpulkan secara automatik:

Itu sama dengan melakukan perkara berikut:

Untuk mengetahui lebih lanjut mengenai cara menulis skema, lihatlah Mongoose Schemas.

Menghuraikan nilai

Setelah menentukan skema, anda boleh menggunakannya untuk menguraikan nilai. Proses ini akan menukar nilai menjadi jenis yang tepat, serta menerapkan penghurai lain yang ditentukan dalam skema. Ini adalah parsers didapati: type, default, set, get, trim, uppercase, lowercase.

Hasilnya akan seperti ini:

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

Mengesahkan nilai

Sama seperti di Skema Mongoose, anda boleh menentukan peraturan pengesahan dalam skema anda. Ini adalah validators didapati: validate, required, match, enum, max, min, maxlength, minlength.

Anda juga boleh membuat parser dan validator tersuai dengan memperluas skema. Kami akan membincangkannya kemudian dalam artikel ini.

Kesalahan pengesahan akan, secara lalai, array objek yang menggambarkan kesalahan.

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

Sekiranya pengesahan berlalu, ia akan mengembalikan nilai yang dihuraikan, seperti parse().

Menyusun pelbagai skema

Katakan anda mempunyai skema yang berasingan yang menggambarkan sesuatu body, identitydan perkara lain, dan mahu menyusunnya untuk membina humanskema. Semudah itu terdengar:

Kaedah lain untuk menyusun skema adalah melalui penyisipan. Skema boleh digunakan sebagai typeskema lain:

Memperluas skema

Inilah bahagian yang schmbenar-benar bersinar. Anda boleh menambahkan penghurai dan validator tersuai atau bahkan menggantikan tingkah laku parsedan validatekaedah lalai dengan membuat kumpulan skema.

A kumpulan skema adalah fungsi yang menerima skema sebelumnya sebagai satu-satunya hujah. Selain sebelumnya params, parsersdan validators, objek skema memiliki mergemetode, yang berguna untuk fungsi kelompok skema untuk menggabungkan fungsi baru ke dalam skema sebelumnya.

Hasil coretan di atas akan seperti ini:

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

Sekiranya anda ingin melangkah lebih jauh dan mengetahui lebih lanjut mengenai cara membuat penghurai tersuai, lihat bagaimana penghurai ditulis di dalam perpustakaan teras di sini.

Dengan memperluas skema, kita dapat membuat pelbagai jenis perkara. Itulah bagaimana kebanyakan schmpustaka satelit, seperti schm-translate, schm-computed dan schm-mongo, ditulis.

Kita akan bercakap mengenai salah satu daripadanya sekarang.

Menamakan semula kunci nilai

schm-translate adalah salah satu perpustakaan satelit termudah, namun kuat schm. Ini adalah lebih daripada 10 baris kod yang dimampatkan menjadi satu fungsi yang membolehkan anda menerjemahkan kunci nilai ke kunci skema anda.

Katakan anda bekerja di webapp yang menggunakan sumber dari REST API. Tiba-tiba, pembangun mengubah sesuatu di API, yang menjadikan badan respons mengembalikan model yang sedikit berbeza daripada model yang diharapkan pelanggan. Daripada emailharta tanah, kini mengembalikan pelbagai emails.

Ini mungkin akan menjadikan aplikasi anda rosak. Sekiranya anda tidak mempunyai skema atau cara terpusat lainnya untuk menangani objek tersebut, anda perlu mengemas kini setiap bahagian aplikasi agar sesuai dengan perubahan pelayan.

Dengan schmdan schm-translate, ia dapat diselesaikan dengan menukar beberapa baris kod di satu tempat:

Hasilnya akan menjadi tepat seperti yang diharapkan oleh aplikasi anda sebelum perubahan:

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

Klik di sini untuk melihat senarai semua pakej

Bagaimana ini berbeza dengan perpustakaan skema lain?

Soalan umum adalah perbezaan antara schmdan perpustakaan lain, seperti Joi dan ajv (yang mengikuti spesifikasi Skema JSON).

Membandingkan dengan ajv, schmtidak mengikuti spesifikasi tertentu. Sebaliknya, ia cuba meniru Mongoose Schema API. Juga, walaupun ajvmempunyai beberapa ciri penghuraian, mereka terbatas pada nilai lalai dan pemaksaan jenis.

Dalam schm, kemampuan untuk menguraikan nilai berdasarkan skema inilah yang memungkinkan untuk mengubah rentetan pertanyaan menjadi pertanyaan MongoDB, misalnya.

Yang mengatakan, kedua Joi- duanya dan ajvboleh digabungkan dengan schm. Anda boleh memperluasnya dengan mudah menggunakan kaedah pengesahan yang berbeza:

Terima kasih kerana membaca ini!

Sekiranya anda menyukainya dan menganggapnya berguna, berikut adalah beberapa perkara yang boleh anda lakukan untuk menunjukkan sokongan anda:

  • Tepuk tangan? butang pada artikel ini beberapa kali (hingga 50)
  • Beri bintang ⭐️ di GitHub: //github.com/diegohaz/schm
  • Ikuti saya di GitHub: //github.com/diegohaz
  • Ikuti saya di Twitter: //twitter.com/diegohaz