Un servizio
Fa parte della sezione TypeScript e NestJS del percorso Node.js di Coddy. Lezione 6 di 17.
Il controller contiene direttamente le attività, quindi nessun'altra parte dell'app può accedervi. I dati e la logica appartengono a un provider: una classe che Nest crea e fornisce a chiunque la richieda.
@Injectable()
export class BooksService {
private books = [{ title: 'Dune' }];
}
@Controller('books')
export class BooksController {
constructor(private readonly booksService: BooksService) {}
}@Injectable() contrassegna la classe e il modulo la elenca in providers. Una classe la richiede indicandola nel proprio costruttore: questa è l'iniezione delle dipendenze. Nest legge il tipo del parametro, che il compilatore conserva per le classi decorate, crea un'unica istanza per tutta l'app e passa la stessa istanza a ogni classe che la richiede. I dati sono condivisi e un test può invece fornire un'istanza fittizia.
Questa lezione inizia con il controller che chiama già this.tasksService.
Sfida
Facile- Rendi
TasksServiceiniettabile, aggiungiglicreate(title)eremove(id), il lavoro che ha svolto il tuo controller nella lezione 5, e inseriscilo neiprovidersdiTasksModule. - Richiedilo nel costruttore di
TasksController. - Invia
POST /taskscon{ "title": "Buy milk" }, poiGET /tasks, quindiDELETE /tasks/99.
Provalo tu
import { NotFoundException } from '@nestjs/common';
export interface Task {
id: number;
title: string;
done: boolean;
createdAt?: string;
}
// Rendi questa classe un provider che Nest possa iniettare.
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;
}
// Sposta qui la logica di creazione e rimozione dal controller.
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.