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

الإقلاع وبنية المشروع

14 دقيقة الدرس 3 من 30

الإقلاع وبنية المشروع

للمشروع المُولَّد حديثًا في NestJS تخطيط متوقَّع. فهمُ كيفية إقلاع التطبيق — وما يفعله كل ملف مُولَّد — يجعل كل ما يليه أسهل. يبدأ كل تطبيق NestJS من ملف دخول واحد ووحدة جذر واحدة.

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

الملف src/main.ts هو حيث يُنشأ التطبيق ويبدأ الاستماع. يستخدم NestFactory لبناء نسخة التطبيق من وحدة الجذر:

// src/main.ts import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3000); } bootstrap();

تأخذ NestFactory.create() وحدة الجذر وتُعيد تطبيقًا مربوطًا بالكامل: تقرأ كل وحدة، وتُنشئ المزوّدات، وتحلّ التبعيات، وتُسجّل المتحكّمات. ثم تبدأ app.listen(3000) خادم HTTP.

main.ts هو أيضًا مكان الإعداد العام — تُضبط الأنابيب العامة وCORS وبادئة المسار وSwagger وغيرها على نسخة app هنا، قبل listen().

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

وحدة الجذر هي جذع الشجرة. تُستورَد كل وحدة أخرى إليها (مباشرة أو بطريق غير مباشر):

// src/app.module.ts import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @Module({ imports: [], controllers: [AppController], providers: [AppService], }) export class AppModule {}

يأخذ المُزخرِف @Module() كائن بيانات وصفية بأربعة مفاتيح ممكنة:

  • imports — وحدات أخرى تحتاج هذه الوحدة إلى مزوّداتها المُصدَّرة.
  • controllers — المتحكّمات التي تُنشئها هذه الوحدة.
  • providers — الخدمات المتاحة للحقن داخل هذه الوحدة.
  • exports — المزوّدات التي تشاركها هذه الوحدة مع الوحدات التي تستوردها.

تخطيط المجلّدات القياسي

src/ main.ts # نقطة الدخول — تُقلع التطبيق app.module.ts # وحدة الجذر app.controller.ts # متحكّم مثال app.service.ts # خدمة مثال test/ # الاختبارات الشاملة nest-cli.json # إعدادات CLI tsconfig.json # إعدادات TypeScript package.json # التبعيات والسكربتات
العُرف: اجمع الكود حسب الميزة لا حسب النوع. تحصل ميزة users على مجلّدها الخاص الذي يضمّ users.module.ts وusers.controller.ts وusers.service.ts ومجلّد dto/ — كل ما يخصّ المستخدمين في مكان واحد.

عُرف تسمية الملفات

يُسمّي NestJS الملفات بصيغة name.type.ts: users.controller.ts وusers.service.ts وusers.module.ts. هذا ليس تجميليًا — فالأداة CLI تعتمد على هذه اللواحق عند التوليد والربط، وتجعل المشاريع الكبيرة سهلة التصفّح فورًا.

يجب تسجيل كل مزوّد. إن أنشأت خدمة ونسيت إضافتها إلى مصفوفة providers في وحدة، فلن يستطيع NestJS حقنها ويرمي خطأ "Nest can't resolve dependencies" عند الإقلاع. استخدام nest g service يتفادى ذلك بتسجيلها لك.

الخلاصة

يُقلع تطبيق NestJS من main.ts الذي يستخدم NestFactory.create() لبناء التطبيق من وحدة الجذر AppModule. تُعلِن الوحدات عن متحكّماتها ومزوّداتها عبر المُزخرِف @Module()، ويُنظَّم الكود حسب الميزة باستخدام عُرف name.type.ts. تاليًا سنغوص في المتحكّمات — نقطة دخول كل طلب.