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.
Wyzwanie
Łatwy- Oznacz
TasksServicejako wstrzykiwalny, dodaj do niego metodycreate(title)iremove(id), czyli pracę wykonaną przez kontroler w lekcji 5, i umieść go na liścieproviderswTasksModule. - Dodaj go jako parametr konstruktora
TasksController. - Wyślij
POST /tasksz{ "title": "Buy milk" }, następnieGET /tasks, a potemDELETE /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.
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.