Menu
CoddyTech

تسجيل مزوّدي الخدمات

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

لا ينشئ Nest إلا الأصناف التي تسردها الوحدة في providers. يمكن لمزوّد أن يطلب مزوّدًا آخر، ويجب تسجيل كل واحد منها.

@Injectable()
export class OrdersService {
    constructor(private readonly mailer: MailerService) {}
}

إذا كان MailerService غير موجود في providers الخاصة بالوحدة، فلن يبدأ التطبيق، وسيذكر Nest بالضبط ما تعذّر عليه العثور عليه:

Nest can't resolve dependencies of the OrdersService (?).
Please make sure that the argument MailerService at index [0]
is available in the OrdersModule module.

تشير ? إلى وسيط المُنشئ المفقود، وتسمّي الرسالة الصنف والوحدة اللذين يجب إصلاحهما.

challenge icon

التحدي

سهل
  • يضيف المشروع الابتدائي ClockService. اطلبه في TasksService واجعل لكل مهمة جديدة createdAt: this.clock.now().
  • سجّل ClockService في TasksModule.
  • أرسل POST /tasks مع عنوان. ثم أزل ClockService من providers، واضغط على «العب»، واقرأ الخطأ، ثم أعده.

جرّب بنفسك

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

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

@Injectable()
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;
    }

    create(title: string): Task {
        const id = Math.max(0, ...this.tasks.map((task) => task.id)) + 1;
        const task = { id, title, done: false };
        this.tasks.push(task);
        return task;
    }

    remove(id: number): void {
        this.findOne(id);
        this.tasks = this.tasks.filter((task) => task.id !== id);
    }
}

جميع دروس TypeScript وNestJS

تدرّب بنفسك: Playground لـ Express