NestJS — Node.js للمؤسسات

وصفات المراقبة: Compodoc و Devtools و Sentry و AsyncLocalStorage

18 دقيقة الدرس 75 من 80

وصفات المراقبة: Compodoc و Devtools و Sentry و AsyncLocalStorage

تحتاج فرق NestJS الإنتاجية إلى رؤية المعمارية وسلوك وقت التشغيل. يوثق Compodoc الوحدات والأصناف، وتعرض NestJS Devtools الرسم، ويلتقط Sentry الإخفاقات، وتحمل AsyncLocalStorage سياق الطلب عبر الاستدعاءات غير المتزامنة.

الفكرة الأساسية

تدور هذه الميزة حول التحكم في كيفية تنظيم التطبيق وسلوكه وقت التشغيل. النقاط التالية هي ما يجب أن يعرفه المطور قبل استخدامها في مشروع حقيقي:

  • ينشئ Compodoc توثيقاً تقنياً قابلاً للقراءة من مزخرفات TypeScript والتعليقات.
  • تساعد NestJS Devtools في تفقد الوحدات والمزوّدات والمسارات وعلاقات الرسم.
  • ينبغي أن يلتقط تكامل Sentry الاستثناءات مع معرفات الطلب ومعرفات المستخدم حيث يكون آمناً وإصدارات الإطلاق.
  • تخزن AsyncLocalStorage سياقاً لكل طلب مثل معرف الارتباط دون تمرير المعاملات عبر كل دالة.
  • ينبغي تهيئة انتشار السياق عند حافة الطلب وقراءته من خدمات التسجيل والتتبع والتدقيق.

مثال عملي

يوضح المثال التالي الشكل العملي للفكرة داخل مشروع NestJS. ليست الغاية حفظ الكود، بل فهم مكانه في المعمارية:

@Injectable() export class RequestContextMiddleware implements NestMiddleware { constructor(private readonly als: AsyncLocalStorage<Map<string, string>>) {} use(req: Request, res: Response, next: NextFunction) { const store = new Map<string, string>(); store.set('requestId', req.header('x-request-id') ?? randomUUID()); this.als.run(store, next); } } this.logger.log({ requestId: this.context.get('requestId'), message: 'Order created' });
ملاحظة تصميمية: ينبغي تصميم المراقبة لا إضافتها عشوائياً لاحقاً. أفضل السجلات والتتبعات تشترك في معرفات مستقرة عبر HTTP والطوابير والخدمات المصغرة والعمال الخلفيين.

قائمة تطبيق إنتاجية

  • ولّد توثيقاً معمارياً للفرق الكبيرة باستخدام Compodoc.
  • استخدم Devtools أو فحص الرسم عندما تصبح اعتماديات الوحدات مربكة.
  • أرفق الإصدار وسياق الطلب بأحداث Sentry.
  • انشر معرفات الارتباط عبر السجلات واتصالات HTTP الخارجية ورسائل الوسيط.
قاعدة عملية: إذا جعلت الميزة الحدود أوضح والاختبارات أسهل فهي اختيار جيد. إذا أخفت التبعيات أو صعّبت التتبع، فأعد التصميم.

الخلاصة

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