NestJS لـ TypeScript: دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة إلى NestJS

\n\n

NestJS (Nest) هو إطار عمل تقدمي لبناء تطبيقات خادم فعالة وقابلة للتوسع وموثوقة على Node.js. يستخدم TypeScript كلغة أساسية ومستوحى من بنية Angular. يوفر NestJS بنية تطبيق جاهزة تساعد المطورين على إنشاء كود منظم جيدًا وقابل للاختبار والصيانة.

\n\n

الهدف الرئيسي لـ NestJS هو حل مشكلة عدم وجود بنية واضحة في نظام Node.js البيئي. على عكس Express أو Fastify، اللذين يعتبران بسيطين ولا يفرضان هيكلًا، يقدم NestJS تجريدات جاهزة: الوحدات، وحدات التحكم، الخدمات، المزودون، والبرمجيات الوسيطة. هذا مفيد بشكل خاص للمشاريع المؤسسية الكبيرة حيث تكون قابلية التنبؤ والتوحيد القياسي للكود مهمة.

\n\n

NestJS مبني فوق أطر HTTP (بشكل افتراضي Express، ولكن يمكن استخدام Fastify) ويضيف إليها نظامًا قويًا لحقن التبعيات (Dependency Injection)، والمزينات، والحراس (Guards)، والمعترضات (Interceptors)، والأنابيب (Pipes)، والمرشحات (Filters). يستخدم الإطار بشكل نشط مزينات TypeScript، مما يجعل الكود تصريحيًا وقابلاً للقراءة.

\n\n

تثبيت NestJS

\n\n

لتثبيت NestJS، ستحتاج إلى Node.js (الإصدار 16 أو أعلى) ومدير حزم npm (أو yarn، pnpm).

\n\n

أسهل طريقة للبدء هي استخدام Nest CLI:

\n\n
npm install -g @nestjs/cli\nnest new my-nest-project\ncd my-nest-project\nnpm run start:dev
\n\n

إذا كنت تفضل تثبيت NestJS في مشروع موجود بالفعل:

\n\n
npm install @nestjs/core @nestjs/common @nestjs/platform-express reflect-metadata rxjs typescript @types/node
\n\n

ستحتاج أيضًا إلى تثبيت TypeScript و ts-node للتطوير:

\n\n
npm install -D typescript @types/node ts-node
\n\n

هام: يستخدم NestJS مكتبة reflect-metadata للعمل مع المزينات. تأكد من استيرادها في الملف الرئيسي main.ts:

\n\n
import "reflect-metadata";
\n\n

بداية سريعة مع مثال كود

\n\n

لنقم بإنشاء تطبيق REST API بسيط بنقطة نهاية واحدة ترجع تحية.

\n\n

هيكل المشروع:

\n
src/\n├── app.controller.ts\n├── app.module.ts\n├── app.service.ts\n└── main.ts
\n\n

main.ts — نقطة الدخول:

\n
import { NestFactory } from '@nestjs/core';\nimport { AppModule } from './app.module';\n\nasync function bootstrap() {\n  const app = await NestFactory.create(AppModule);\n  await app.listen(3000);\n  console.log('Server is running on http://localhost:3000');\n}\nbootstrap();
\n\n

app.module.ts — الوحدة الجذرية:

\n
import { Module } from '@nestjs/common';\nimport { AppController } from './app.controller';\nimport { AppService } from './app.service';\n\n@Module({\n  imports: [],\n  controllers: [AppController],\n  providers: [AppService],\n})\nexport class AppModule {}
\n\n

app.controller.ts — وحدة التحكم:

\n
import { Controller, Get } from '@nestjs/common';\nimport { AppService } from './app.service';\n\n@Controller()\nexport class AppController {\n  constructor(private readonly appService: AppService) {}\n\n  @Get()\n  getHello(): string {\n    return this.appService.getHello();\n  }\n}
\n\n

app.service.ts — الخدمة (منطق الأعمال):

\n
import { Injectable } from '@nestjs/common';\n\n@Injectable()\nexport class AppService {\n  getHello(): string {\n    return 'Hello World!';\n  }\n}
\n\n

قم بتشغيل التطبيق باستخدام الأمر npm run start:dev وافتح http://localhost:3000. سترى "Hello World!".

\n\n

الأساليب والوظائف الأساسية في NestJS

\n\n

دعنا نستعرض 10 عناصر رئيسية في NestJS تُستخدم في كل مشروع.

\n\n

1. @Module() — مزين الوحدة

\n

ما يفعله: يحدد كل

توصيات