ما هو NestJS ولماذا تحتاجه؟
NestJS هو إطار عمل (Framework) تقدمي لبناء تطبيقات خادم (Server-side) فعالة وموثوقة وقابلة للتوسع باستخدام Node.js. يعتمد على بنية معمارية معبرة مستوحاة من Angular، وهو مبني بشكل افتراضي على TypeScript ولكنه يدعم أيضًا JavaScript النقي بشكل كامل. يقوم NestJS بتجريد التفاصيل منخفضة المستوى للمكتبات الشائعة مثل Express (الافتراضية) أو Fastify، مما يوفر للمطور مجموعة أدوات قوية لتنظيم الكود: وحدات (Modules)، وحدات تحكم (Controllers)، خدمات (Services)، موفرو خدمات (Providers)، وسيطات (Middleware)، حراس (Guards)، معترضات (Interceptors)، أنابيب (Pipes)، ومرشحات (Filters).
لماذا تحتاج NestJS؟ في تطوير الويب الحديث باستخدام Node.js، غالبًا ما تنشأ مشكلة تنظيم الكود: النصوص البسيطة على Express تتحول بسرعة إلى "شعيرية" (Spaghetti code) مع زيادة الوظائف. يحل NestJS هذه المشكلة من خلال فرض هيكل معياري واضح ومبادئ حقن التبعية (Dependency Injection). وهذا يسهل عملية الاختبار والصيانة وتوسيع نطاق التطبيق. الإطار مثالي لبناء REST APIs، خوادم GraphQL، الخدمات المصغرة (Microservices)، وتطبيقات الوقت الفعلي (WebSockets).
الميزة الرئيسية لـ NestJS هي نظامه البيئي. فهو يوفر وحدات رسمية للتعامل مع قواعد البيانات (TypeORM, Mongoose, Prisma)، المصادقة (Passport)، التحقق من الصحة (class-validator)، الإعدادات، قوائم الانتظار (Bull)، التخزين المؤقت، وغيرها الكثير. بفضل هذا، يمكن للمطور التركيز على منطق الأعمال بدلاً من دمج المكتبات غير المتجانسة.
التثبيت
لتثبيت NestJS، نستخدم مدير الحزم npm (أو yarn). يُنصح بتثبيت أداة CLI بشكل عام لإنشاء المشاريع بسرعة:
npm install -g @nestjs/cli
بعد تثبيت CLI، يمكنك إنشاء مشروع جديد بالأمر التالي:
nest new my-nest-project
أثناء التثبيت، سيُطلب منك اختيار مدير الحزم (npm, yarn, pnpm) واللغة (TypeScript موصى به، أو JavaScript). إذا كنت تريد إضافة NestJS إلى مشروع قائم، فقم بتثبيت الحزم الأساسية:
npm install @nestjs/core @nestjs/common @nestjs/platform-express reflect-metadata rxjs
ملاحظة: مكتبة reflect-metadata إلزامية لعمل المُزيّنات (Decorators).
بداية سريعة: مثال عملي بسيط
لنقم بإنشاء REST API بسيط مع نقطة نهاية واحدة (Endpoint) ترجع "Hello World".
الخطوة 1: أنشئ ملف app.controller.js
// app.controller.js
const { Controller, Get } = require('@nestjs/common');
@Controller()
export class AppController {
@Get()
getHello() {
return 'Hello World!';
}
}
الخطوة 2: أنشئ ملف app.module.js
// app.module.js
const { Module } = require('@nestjs/common');
const { AppController } = require('./app.controller');
@Module({
controllers: [AppController],
})
export class AppModule {}
الخطوة 3: أنشئ الملف الرئيسي main.js
// main.js
const { NestFactory } = require('@nestjs/core');
const { AppModule } = require('./app.module');
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
console.log('الخادم يعمل على http://localhost:3000');
}
bootstrap();
الخطوة 4: شغّل التطبيق
node main.js
الآن، انتقل إلى العنوان http://localhost:3000 — ستظهر لك رسالة "Hello World!".
الطرق، الفئات، والمُزيّنات الأساسية
فيما يلي 8 عناصر رئيسية في NestJS مع التوقيعات والشرح والأمثلة بلغة JavaSc