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.
Aufgabe
Einfach- Das Starterprojekt fügt
ClockServicehinzu. Fordere es inTasksServicean und weise jeder neuen AufgabecreatedAt: this.clock.now()zu. - Registriere
ClockServiceinTasksModule. - Sende
POST /tasksmit einem Titel. Entferne dannClockServiceausproviders, 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