Menu
CoddyTech

Provider registrieren

Teil des Abschnitts TypeScript und NestJS der Node.js-Journey von Coddy. Lektion 10 von 24.

Nest erstellt nur die Klassen, die ein Modul in providers auflistet. Ein Provider kann einen anderen Provider anfordern, und jeder von ihnen muss registriert sein.

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

Wenn MailerService in den providers des Moduls fehlt, startet die App nicht, und Nest sagt genau, was nicht gefunden werden konnte:

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

Das ? kennzeichnet das fehlende Konstruktorargument, und die Meldung nennt die Klasse und das Modul, die korrigiert werden müssen.

challenge icon

Aufgabe

Einfach
  • Das Starterprojekt fügt ClockService hinzu. Fordere es in TasksService an und weise jeder neuen Aufgabe createdAt: this.clock.now() zu.
  • Registriere ClockService in TasksModule.
  • Sende POST /tasks mit einem Titel. Entferne dann ClockService aus providers, drücke auf „Ausführen“, lies den Fehler und füge es wieder hinzu.

Probier es selbst

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);
    }
}

Alle Lektionen in TypeScript und NestJS

Übe selbstständig: Express-Playground