كيفية كتابة واجهات برمجة التطبيقات Node.js الجميلة باستخدام المتزامن / انتظار وقاعدة Firebase

سيغطي هذا البرنامج التعليمي حالات الاستخدام المعتادة التي ستظهر لك عند كتابة نقاط نهاية واجهة برمجة تطبيقات RESTful لقراءة مثيل قاعدة بيانات Firebase والكتابة إليه.

سيكون هناك تركيز على التعليمات البرمجية غير المتزامنة الجميلة ، والتي تستخدم ميزة المزامنة / الانتظار في Node.js (متوفر في الإصدار 7.6 وما فوق).

(لا تتردد في أن تبتسم بلطف وأنت تلوم وداعا إلى الجحيم back)

المتطلبات الأساسية

سنفترض أن لديك بالفعل تطبيق Node.js تم إعداده باستخدام Firebase Admin SDK. إذا لم يكن كذلك ، فراجع دليل الإعداد الرسمي.

كتابة البيانات

أولاً ، دعنا ننشئ مثالًا لنقطة نهاية POST ستحفظ الكلمات في مثيل قاعدة بيانات Firebase:

هذه نقطة نهاية أساسية جدًا تأخذ userId وقيمة الكلمة ، ثم تحفظ الكلمة المحددة في مجموعة كلمات. بسيطا بما فيه الكفاية.

لكن هناك شيء خاطئ. نحن نفتقد معالجة الأخطاء! في المثال أعلاه ، نرجع رمز الحالة 201 (بمعنى أنه تم إنشاء المورد) ، حتى لو لم يتم حفظ الكلمة بشكل صحيح في مثيل قاعدة بيانات Firebase.

لذلك ، دعونا نضيف بعض معالجة الأخطاء:

الآن وبعد أن ترجع نقطة النهاية رموز الحالة بدقة ، يمكن للعميل عرض رسالة ذات صلة للمستخدم. على سبيل المثال ، "تم حفظ Word بنجاح." أو "غير قادر على حفظ الكلمة ، انقر هنا للمحاولة مرة أخرى."

ملاحظة: إذا بدت بعض صيغة ES2015 + غير مألوفة بالنسبة لك ، فتحقق من دليل Babel ES2015.

قراءة البيانات

حسنًا ، بعد أن كتبنا بعض البيانات إلى قاعدة بيانات Firebase الخاصة بنا ، دعنا نحاول القراءة منها.

أولاً ، لنرى كيف تبدو نقطة نهاية GET باستخدام الطريقة الأصلية المستندة إلى الوعد:

مرة أخرى ، بسيطة بما فيه الكفاية. الآن دعنا نقارنها بإصدار غير متزامن / انتظار من نفس الكود:

لاحظ الكلمة الأساسية غير المتزامن التي تمت إضافتها قبل معلمات الدالة (req، res) والكلمة الرئيسية التي تنتظر الآن والتي تسبق عبارة db.ref ().

تُرجع طريقة db.ref () وعدًا ، مما يعني أنه يمكننا استخدام الكلمة الرئيسية التي تنتظر الانتظار لإيقاف تنفيذ البرنامج النصي مؤقتًا. (يمكن استخدام الكلمة الرئيسية في انتظار مع أي وعد).

لن يتم تشغيل الطريقة res.send () النهائية إلا بعد الوفاء بوعد db.ref ().

كل هذا جيد وجيد ، لكن الجمال الحقيقي للمزامنة / الانتظار يصبح واضحًا عندما تحتاج إلى سلسلة طلبات غير متزامنة متعددة.

لنفترض أنه كان عليك تشغيل عدد من الوظائف غير المتزامنة بالتتابع:

ليست جميلة. يُعرف هذا أيضًا باسم "هرم الموت" (ولم نقم حتى بإضافة معالجات الأخطاء حتى الآن).

ألقِ نظرة الآن على المقتطف أعلاه المعاد كتابته لاستخدام المزامنة / الانتظار:

لا مزيد من هرم العذاب! والأكثر من ذلك ، أنه يمكن لف كل عبارات الانتظار في كتلة واحدة للتجربة / الاستيلاء لمعالجة أي أخطاء:

طلبات متزامن / انتظار متوازية

ماذا عن الحالات التي تحتاج فيها إلى جلب سجلات متعددة من قاعدة بيانات Firebase في نفس الوقت؟

سهل. فقط استخدم الأسلوب Promise.all () لتشغيل طلبات قاعدة بيانات Firebase بالتوازي:

شيء اخر

عند إنشاء نقطة نهاية لإرجاع البيانات التي يتم استردادها من مثيل قاعدة بيانات Firebase ، احرص على عدم إرجاع لقطة snvalhot.val () بأكملها. يمكن أن يسبب هذا مشكلة في تحليل JSON على العميل.

على سبيل المثال ، قل أن عميلك لديه الكود التالي:

يمكن أن يكون snapshot.val () الذي تم إرجاعه بواسطة Firebase كائنًا JSON أو لاغياً في حالة عدم وجود سجل. إذا تم إرجاع قيمة خالية ، فسيؤدي response.json () في المقتطف أعلاه إلى ظهور خطأ ، حيث إنه يحاول تحليل نوع غير كائن.

لحماية نفسك من هذا ، يمكنك استخدام Object.assign () لإرجاع كائن إلى العميل دائمًا:

شكرا للقراءة!

هل أنت مهتم بمشاهدة مشروع حقيقي يعتمد على Firebase و Node.js؟ تحقق من Vocabify ، باني المفردات الذي يساعدك على تذكر الكلمات التي صادفتك.