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

التطبيقات المستقلة والعاملون الخلفيون

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

التطبيقات المستقلة والعاملون الخلفيون

NestJS ليس مخصصاً لخوادم HTTP فقط. يمكن لحاوية حقن الاعتماديات نفسها تشغيل واجهات CLI، وعمال الطوابير، وترحيلات البيانات، ومولدات التقارير، ومهام الصيانة المجدولة. تستخدم التطبيقات المستقلة NestFactory.createApplicationContext() بدلاً من listen().

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

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

  • تشغل createApplicationContext() رسم الوحدات دون إنشاء محول HTTP.
  • تستطيع التطبيقات المستقلة حل أي مزود واستدعاء خدمات التطبيق مباشرة.
  • أغلق السياق دائماً حتى تتوقف مجمعات قواعد البيانات وعملاء Redis والمؤقتات بنظافة.
  • استخدم WorkerModule مخصصة عندما يجب أن يستورد العامل الخلفي مزودات أقل من API الويب.
  • ينبغي لعمال الطوابير وأوامر CLI مشاركة خدمات المجال مع API، لكن امتلاك معالجة الأخطاء والتسجيل على مستوى العملية.

مثال عملي

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

async function bootstrap() { const app = await NestFactory.createApplicationContext(WorkerModule, { logger: ['log', 'warn', 'error'], }); try { const job = app.get(NightlyReportJob); await job.run(); } finally { await app.close(); } } bootstrap().catch((error) => { console.error(error); process.exit(1); });
ملاحظة تصميمية: التطبيقات المستقلة هي الطريقة النظيفة لإعادة استخدام معمارية NestJS خارج HTTP. كما تجعل سكربتات التشغيل قابلة للاختبار لأن العمل يبقى داخل خدمات قابلة للحقن.

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

  • استخدم createApplicationContext() للعمال والسكربتات وعمليات الأوامر.
  • أغلق سياق التطبيق داخل finally.
  • اجعل وحدات العمال خفيفة لتقليل زمن الإقلاع والذاكرة.
  • أعد رمز خروج غير صفري عند فشل المهام التشغيلية.
قاعدة عملية: إذا جعلت الميزة الحدود أوضح والاختبارات أسهل فهي اختيار جيد. إذا أخفت التبعيات أو صعّبت التتبع، فأعد التصميم.

الخلاصة

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