Menu
CoddyTech

Usługa

Część sekcji TypeScript i NestJS ścieżki Node.js w Coddy. Lekcja 6 z 17.

Kontroler przechowuje same zadania, więc żadna inna część aplikacji nie może uzyskać do nich dostępu. Dane i logika należą do dostawcy: klasy, którą Nest tworzy i przekazuje każdemu, kto o nią poprosi.

@Injectable()
export class BooksService {
    private books = [{ title: 'Dune' }];
}

@Controller('books')
export class BooksController {
    constructor(private readonly booksService: BooksService) {}
}

@Injectable() oznacza klasę, a moduł umieszcza ją w providers. Klasa prosi o nią, podając jej nazwę w konstruktorze: to wstrzykiwanie zależności. Nest odczytuje typ parametru, który kompilator zachowuje dla dekorowanych klas, tworzy jedną instancję dla całej aplikacji i przekazuje tę samą instancję każdej klasie, która o nią poprosi. Dane są współdzielone, a test może zamiast niej przekazać atrapę.

Ta lekcja rozpoczyna się od kontrolera, który już wywołuje this.tasksService.

challenge icon

Wyzwanie

Łatwy
  • Oznacz TasksService jako wstrzykiwalny, dodaj do niego metody create(title) i remove(id), czyli pracę wykonaną przez kontroler w lekcji 5, i umieść go na liście providers w TasksModule.
  • Dodaj go jako parametr konstruktora TasksController.
  • Wyślij POST /tasks z { "title": "Buy milk" }, następnie GET /tasks, a potem DELETE /tasks/99.

Spróbuj swoich sił

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

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

// Uczyń tę klasę providerem, którego Nest może wstrzykiwać.
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;
    }

    // Przenieś tutaj logikę tworzenia i usuwania z kontrolera.
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji TypeScript i NestJS