Ein Service
Teil des Abschnitts TypeScript und NestJS der Node.js-Journey von Coddy. Lektion 6 von 17.
Der Controller enthält die Tasks selbst, sodass kein anderer Teil der App darauf zugreifen kann. Daten und Logik gehören in einen Provider: eine Klasse, die Nest erstellt und jedem übergibt, der danach fragt.
@Injectable()
export class BooksService {
private books = [{ title: 'Dune' }];
}
@Controller('books')
export class BooksController {
constructor(private readonly booksService: BooksService) {}
}@Injectable() kennzeichnet die Klasse, und das Modul führt sie unter providers auf. Eine Klasse fordert sie an, indem sie sie in ihrem Konstruktor benennt: Das ist Dependency Injection. Nest liest den Typ des Parameters, den der Compiler für dekorierte Klassen beibehält, erstellt eine Instanz für die gesamte App und übergibt dieselbe Instanz an jede Klasse, die danach fragt. Die Daten werden gemeinsam genutzt, und ein Test kann stattdessen ein Fake übergeben.
Diese Lektion beginnt damit, dass der Controller bereits this.tasksService aufruft.
Aufgabe
Einfach- Mache
TasksServiceinjizierbar, gib ihmcreate(title)undremove(id)– die Arbeit, die dein Controller in Lektion 5 übernommen hat – und trage ihn inTasksModulesprovidersein. - Fordere ihn im Konstruktor von
TasksControlleran. - Sende
POST /tasksmit{ "title": "Buy milk" }, dannGET /tasksund anschließendDELETE /tasks/99.
Probier es selbst
import { NotFoundException } from '@nestjs/common';
export interface Task {
id: number;
title: string;
done: boolean;
createdAt?: string;
}
// Mache diese Klasse zu einem Provider, den Nest injizieren kann.
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;
}
// Verschiebe die Logik zum Erstellen und Entfernen aus dem Controller hierher.
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.