Menu
CoddyTech

خدمة

جزء من قسم TypeScript وNestJS في رحلة Node.js على Coddy. الدرس 6 من 17.

وحدة التحكم تحتفظ بالمهام نفسها، لذا لا يمكن لأي جزء آخر من التطبيق الوصول إليها. مكان البيانات والمنطق هو موفّر: صنف تنشئه Nest وتسلمه إلى من يطلبه.

@Injectable()
export class BooksService {
    private books = [{ title: 'Dune' }];
}

@Controller('books')
export class BooksController {
    constructor(private readonly booksService: BooksService) {}
}

تُعلِّم @Injectable() الصنف، وتدرجه الوحدة في providers. يطلب الصنف هذا الموفّر بذكر اسمه في المُنشئ: وهذا هو حقن التبعية. تقرأ Nest نوع المعامل، الذي يحتفظ به المترجم للأصناف المزخرفة، وتنشئ نسخة واحدة للتطبيق كله وتمرر النسخة نفسها إلى كل صنف يطلبها. وتكون البيانات مشتركة، ويمكن للاختبار أن يمرر بديلًا وهميًا بدلًا منها.

يبدأ هذا الدرس بوحدة التحكم وهي تستدعي this.tasksService بالفعل.

challenge icon

التحدي

سهل
  • اجعل TasksService قابلةً للحقن، وأضف إليها create(title) وremove(id)، وهما العمل الذي أنجزته وحدة التحكم في الدرس 5، ثم أدرجها ضمن providers في TasksModule.
  • اطلبها في مُنشئ TasksController.
  • أرسل POST /tasks مع { "title": "Buy milk" }، ثم GET /tasks، ثم DELETE /tasks/99.

جرّب بنفسك

import { NotFoundException } from '@nestjs/common';

export interface Task {
    id: number;
    title: string;
    done: boolean;
    createdAt?: string;
}

// اجعل هذه الفئة مزوّدًا يمكن لـ Nest حقنه.
export class TasksService {
    private tasks: Task[] = [
        { id: 1, title: 'Write the README', done: true, createdAt: '2026-01-05T09:00:00.000Z' },
        { id: 2, title: 'Fix the login bug', done: false, createdAt: '2026-01-06T14:30:00.000Z' },
        { id: 3, title: 'Plan the sprint', done: false, createdAt: '2026-01-07T08:15:00.000Z' },
    ];

    findAll(done?: string): Task[] {
        if (done === undefined) {
            return this.tasks;
        }
        return this.tasks.filter((task) => task.done === (done === 'true'));
    }

    findOne(id: number): Task {
        const task = this.tasks.find((task) => task.id === id);
        if (!task) {
            throw new NotFoundException(`Task ${id} not found`);
        }
        return task;
    }

    // انقل منطق الإنشاء والحذف من المتحكّم إلى هنا.
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس TypeScript وNestJS