Menu
CoddyTech

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.

challenge icon

Sfida

Facile
  • Rendi TasksService iniettabile, aggiungigli create(title) e remove(id), il lavoro che ha svolto il tuo controller nella lezione 5, e inseriscilo nei providers di TasksModule.
  • Richiedilo nel costruttore di TasksController.
  • Invia POST /tasks con { "title": "Buy milk" }, poi GET /tasks, quindi DELETE /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.
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di TypeScript e NestJS