كيف تكتب مخططات قوية في جافا سكريبت

تقديم schm ، وهي مكتبة وظيفية وقابلة للتكوين بشكل كبير لإنشاء مخططات في JavaScript و Node.js

أعمل مع HTML و CSS و JavaScript منذ عام 2002. كانت المرة الأولى التي احتجت فيها إلى نوع من المخطط في JavaScript قبل بضع سنوات فقط.

بعد استخدام العديد من المكتبات المختلفة وحتى تأليف واحدة وأخرى ، قررت إنشاء schm. هذا هو نتيجة كل تجربتي مع المخططات في JavaScript.

ما هو شم؟

schm هي مجموعة من حزم npm لمساعدة المطورين على التعامل مع المخططات في JavaScript و Node.js.

إنه مستوحى للغاية من مخططات النمس. في الواقع ، إنها متشابهة جدًا بحيث يمكنك استخدام schmالمعلمات داخل مخططات Mongoose والعكس صحيح. ومع ذلك ، فهو ليس خاصًا بـ MongoDB. يمكنك استخدامه لكل شيء في JavaScript.

ما نوع المشاكل التي يحلها schm؟

؟ التحليل والتحقق من صحة قيم النموذج

على العميل ، يمكنك استخدام المخططات لتحديد نماذج لنماذج HTML. يسهل تحويل القيم والتحقق من صحتها. أيضًا ، إذا كنت تستخدم Node.js على الخادم ، فيمكنك استخدام نفس المخطط. والنتيجة هي سلوك متسق بين عمليات التحقق من صحة العميل والخادم.

؟ التحليل والتحقق من صحة سلسلة الاستعلام

النظر في سلسلة الاستعلام التالي: /?term=John&page=2&limit=10. من خلال الجمع بين الحزم مثل schm-koa و schm-Express و / أو schm-mongo ، ستتمكن من تحليل سلاسل الاستعلام والتحقق منها باستخدام مصطلحات البحث وترقيم الصفحات بسهولة.

☊ التواصل بين العميل والخادم

إذا كان لديك تطبيق يستهلك الموارد من واجهة برمجة تطبيقات REST ، على سبيل المثال ، يمكنك استخدام المخططات لتعريف بنية الكائن التي يتوقع العميل أن يتلقاها من الخادم على العميل. إذا تغير شيء ما على الخادم (تمت إعادة تسمية الخصائص ، على سبيل المثال) ، يمكنك فقط تحديث مخططك حتى يستمر التطبيق بأكمله في العمل.

إنشاء مخطط

المخطط البسيط هو مجرد خريطة مفاتيح وأنواع:

هذا هو نفس استخدام typeخاصية:

يمكن أن يكون المخطط أيضًا خريطة بين المفاتيح والقيم الافتراضية. سيتم استنتاج الأنواع تلقائيًا:

هذا يعادل القيام بما يلي:

لمعرفة المزيد حول كيفية كتابة المخططات ، ألق نظرة على مخططات النمس.

تحليل القيم

بعد تحديد المخطط ، يمكنك استخدامه لتحليل القيم. ستعمل هذه العملية على تحويل القيم إلى الأنواع المناسبة ، بالإضافة إلى تطبيق محللات أخرى محددة في المخطط. هذه هي المحللون اللغويون المتاحون: type، default، set، get، trim، uppercase، ، lowercase.

سيكون الإخراج شيئًا مثل هذا:

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

التحقق من صحة القيم

تمامًا كما هو الحال في Mongoose Schemas ، يمكنك تحديد قواعد التحقق داخل المخططات الخاصة بك. هذه هي المدققات المتاحة: validate، required، match، enum، max، min، maxlength، minlength.

يمكنك أيضًا إنشاء موزعي ومدققي مخصصين من خلال توسيع مخطط قاعدة البيانات. سنتحدث عنها لاحقًا في هذه المقالة.

سيكون خطأ التحقق ، افتراضيًا ، عبارة عن مصفوفة من الكائنات تصف الأخطاء.

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

إذا تم التحقق من الصحة ، فسيعيد القيم التي تم تحليلها ، تمامًا مثل parse().

يؤلف مخططات متعددة

نقول لديك مخططات منفصلة تصف body، identityوأشياء أخرى، وتريد أن يؤلف لهم بناء humanالمخطط. هذا سهل كما يبدو:

طريقة أخرى لتكوين المخططات هي من خلال التداخل. يمكن استخدام typeالمخطط كمخطط داخل مخطط آخر:

تمديد المخططات

هذا هو الجزء الذي schmيضيء حقًا. يمكنك إضافة موزعي مخصصة و مصادقة أو حتى استبدال السلوك الافتراضي parseو validateالأساليب التي إنشاء مجموعات المخطط.

A مجموعة المخطط هي وظيفة الذي يتلقى المخطط السابق باسم الحجة الوحيدة. وإلى جانب سابقة params، parsersو validators، كائن المخطط له mergeطريقة، وهو أمر مفيد لوظائف مجموعة مخطط لدمج وظائف جديدة في المخططات السابقة.

سيكون إخراج المقتطف أعلاه شيئًا كالتالي:

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

إذا كنت ترغب في الذهاب إلى أبعد من ذلك ومعرفة المزيد حول كيفية إنشاء موزعي مخصص ، فقم بإلقاء نظرة على كيفية كتابة المحلل اللغوي داخل المكتبة الأساسية هنا.

من خلال توسيع المخططات ، يمكننا إنشاء أنواع كثيرة من الأشياء. هذه هي الطريقة التي تتم بها كتابة معظم schmمكتبات الأقمار الصناعية ، مثل schm-translate و schm-computed و schm-mongo.

سوف نتحدث عن واحد منهم الآن.

إعادة تسمية مفاتيح القيم

schm-translate هي واحدة من أبسط مكتبات الأقمار الصناعية في schm. إنه أكثر من 10 أسطر من التعليمات البرمجية مضغوطة في وظيفة واحدة تتيح لك ترجمة مفاتيح القيم إلى مفاتيح المخطط.

لنفترض أنك تعمل على تطبيق ويب يستهلك موارد من واجهة برمجة تطبيقات REST. فجأة ، يغير المطورون الأشياء في واجهة برمجة التطبيقات ، مما يجعل هيئة الاستجابة تُرجع نموذجًا مختلفًا قليلاً عن النموذج الذي توقعه العميل. بدلاً من emailخاصية ، فإنها تُرجع الآن مصفوفة من emails.

سيؤدي هذا على الأرجح إلى تعطل تطبيقك. إذا لم يكن لديك مخطط أو أي طريقة مركزية أخرى للتعامل مع هذا الكائن ، فستحتاج إلى تحديث كل جزء من التطبيق ليتوافق مع تغييرات الخادم.

باستخدام schmو schm-translate، يمكن حلها عن طريق تغيير بضعة أسطر من التعليمات البرمجية في مكان واحد فقط:

سيكون الناتج هو بالضبط ما توقعه تطبيقك قبل التغيير:

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

انقر هنا لرؤية قائمة جميع الحزم

كيف يختلف هذا عن مكتبات المخططات الأخرى؟

السؤال الشائع هو الفرق بين schmوالمكتبات الأخرى ، مثل Joi و ajv (الذي يتبع مواصفات مخطط JSON).

بالمقارنة مع ajv، schmلا تتبع أي مواصفات معينة. بدلاً من ذلك ، يحاول محاكاة Mongoose Schema API. أيضًا ، على الرغم من ajvوجود بعض ميزات التحليل ، إلا أنها تقتصر على القيم الافتراضية ونوع الإكراه.

في schm، القدرة على تحليل القيم بناءً على المخطط هو ما يجعل من الممكن تحويل سلسلة استعلام إلى استعلام MongoDB ، على سبيل المثال.

وقال، على حد سواء Joiو ajvيمكن دمجها مع schm. يمكنك توسيعه بسهولة لاستخدام طريقة تحقق مختلفة:

شكرا لقراءتك هذا!

إذا أعجبك ذلك ووجدته مفيدًا ، فإليك بعض الأشياء التي يمكنك القيام بها لإظهار دعمك:

  • ضرب التصفيق؟ زر في هذه المقالة عدة مرات (حتى 50)
  • امنح نجمة ⭐️ على جيثب: //github.com/diegohaz/schm
  • اتبعني على جيثب: //github.com/diegohaz
  • تابعوني على تويتر: //twitter.com/diegohaz