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

تطبيقات سطر الأوامر والبوتات والواجهات غير HTTP

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

تطبيقات سطر الأوامر والبوتات والواجهات غير HTTP

تستطيع معمارية NestJS تشغيل أكثر من واجهات API. يبني Nest Commander تطبيقات CLI بالمزخرفات وحقن الاعتماديات، بينما تستخدم تكاملات مجتمعية مثل Necord نموذج الوحدات نفسه لبوتات Discord والواجهات المدفوعة بالأحداث.

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

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

  • تعرف أصناف CommandRunner أوامر CLI مع إمكانية حقن خدمات التطبيق.
  • تشغل CommandFactory.run() سياق تطبيق Nest لتنفيذ الأوامر.
  • ينبغي لتطبيقات CLI التحقق من المعاملات وإرجاع رموز خروج واضحة للأتمتة.
  • تعيّن تكاملات البوت الأحداث الخارجية إلى مزودات ومعالجات على غرار المتحكمات أو البوابات.
  • ينبغي للواجهات غير HTTP مشاركة خدمات المجال مع عزل المحولات الخاصة بالبروتوكول.

مثال عملي

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

@Command({ name: 'users:import', description: 'Import users from a CSV file' }) export class ImportUsersCommand extends CommandRunner { constructor(private readonly importer: UsersImporter) { super(); } async run(inputs: string[], options: ImportOptions): Promise<void> { await this.importer.importFromCsv(options.file); } @Option({ flags: '-f, --file <path>' }) parseFile(value: string) { return value; } }
ملاحظة تصميمية: تعامل مع كل واجهة كمحول. يجب أن تستدعي متحكمات HTTP وأوامر CLI ومعالجات Discord ومستهلكو الطوابير خدمات التطبيق نفسها بدلاً من تكرار منطق العمل.

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

  • تحقق من مدخلات CLI قبل تنفيذ عمل مدمّر.
  • أعد رموز خروج ذات معنى لـ CI وcron.
  • افصل وحدات البوت والأوامر عن وحدات HTTP.
  • اكتب اختبارات حول الخدمة المشتركة ثم اختبارات خفيفة حول كل محول.
قاعدة عملية: إذا جعلت الميزة الحدود أوضح والاختبارات أسهل فهي اختيار جيد. إذا أخفت التبعيات أو صعّبت التتبع، فأعد التصميم.

الخلاصة

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