Menu
CoddyTech

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.

challenge icon

Aufgabe

Einfach
  • Mache TasksService injizierbar, gib ihm create(title) und remove(id) – die Arbeit, die dein Controller in Lektion 5 übernommen hat – und trage ihn in TasksModules providers ein.
  • Fordere ihn im Konstruktor von TasksController an.
  • Sende POST /tasks mit { "title": "Buy milk" }, dann GET /tasks und anschließend DELETE /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.
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in TypeScript und NestJS