مقدمة إلى NestJS
مقدمة إلى NestJS
NestJS هو إطار عمل تقدّمي لـ Node.js لبناء تطبيقات خادم فعّالة وموثوقة وقابلة للتوسّع. بينما يمنحك Express الخام لوحة فارغة، يمنحك NestJS بنية ذات رأي — هيكلًا متناسقًا يتوسّع من مشروع نهاية أسبوع إلى نظام مؤسسي كبير دون أن ينهار تحت وزنه.
أي مشكلة يحلّها NestJS؟
إنّ Express وFastify بسيطان وبلا رأي مُسبق. هذه الحرية رائعة حتى يكبر الفريق: فكل مطوّر يُنظّم الكود بطريقته، ويتسرّب منطق العمل إلى معالجات المسارات، ويصبح الاختبار مؤلمًا. يحلّ NestJS ذلك بتوفير بنية جاهزة: نظام وحدات، وحقن تبعيات، وفصل واضح للمسؤوليات مستوحى من Angular.
الركائز الثلاث
- TypeScript أولًا: مبني من أجل TypeScript بدعم كامل للمُزخرِفات (decorators) والأنواع العامة والكتابة القويّة (وتعمل JavaScript العاديّة أيضًا).
- كائنية + دالّية: يجمع بين البرمجة كائنية التوجّه والدالّية والتفاعلية الدالّية.
- البنية: الوحدات والمتحكّمات والمزوّدات تمنح كل تطبيق الشكل المتوقَّع نفسه.
اللبنات الأساسية
كل ما تبنيه تقريبًا في NestJS هو واحد من ثلاثة أشياء:
- المتحكّمات (Controllers) — تستقبل طلبات HTTP وتُعيد الاستجابات.
- المزوّدات/الخدمات (Providers/Services) — تحتوي منطق العمل، وتُحقَن أينما لزم.
- الوحدات (Modules) — تجمع المتحكّمات والمزوّدات المرتبطة في ميزة متماسكة.
لمحة أولى عن متحكّم وخدمة:
لاحظ المُزخرِفَين @Controller() و@Injectable(). يقرأ NestJS هذه البيانات الوصفية ليربط كل شيء معًا — أنت تصف ما هو الصنف، ويتولّى الإطار كيفية ربطه.
NestJS مقابل Express مقابل Fastify
- Express: بسيط ومرن وبلا بنية — تصمّم المعماريّة بنفسك.
- Fastify: مثل Express لكنه أسرع، بنهج قائم على المخطّطات (schemas).
- NestJS: إطار حول Express/Fastify يضيف الوحدات وحقن التبعيات والاختبار والأعراف.
لماذا يتوسّع؟
لأنّ التبعيات تُحقَن بدل ربطها يدويًا، تبقى الأصناف صغيرة وقابلة للاختبار، وتبقى الميزات معزولة في وحدات، وتنطبق الأنماط نفسها سواء كنت تبني REST أو GraphQL أو WebSockets أو خدمات مصغّرة. تعلّم البنية مرّة واحدة وتنتقل معك إلى كل مكان.
الخلاصة
يجلب NestJS بنية ذات رأي وقائمة على TypeScript إلى Node.js، مبنيّة على ثلاث ركائز: المتحكّمات والمزوّدات والوحدات، يربطها معًا المُزخرِفات وحقن التبعيات. في الدرس التالي ستثبّت Nest CLI وتُنشئ مشروعك الأول.