Menu
CoddyTech

Un service

Fait partie de la section TypeScript et NestJS du Journey Node.js de Coddy. Leçon 6 sur 17.

Le contrôleur contient lui-même les tâches, donc aucune autre partie de l’application ne peut y accéder. Les données et la logique appartiennent à un provider : une classe que Nest crée et fournit à quiconque la demande.

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

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

@Injectable() marque la classe, et le module la répertorie dans providers. Une classe la demande en la nommant dans son constructeur : c’est l’injection de dépendances. Nest lit le type du paramètre, que le compilateur conserve pour les classes décorées, crée une seule instance pour toute l’application et transmet cette même instance à chaque classe qui la demande. Les données sont partagées, et un test peut fournir un substitut à la place.

Cette leçon commence avec le contrôleur qui appelle déjà this.tasksService.

challenge icon

Défi

Facile
  • Rends TasksService injectable, donne-lui create(title) et remove(id), le travail effectué par ton contrôleur dans la leçon 5, et ajoute-le aux providers de TasksModule.
  • Demande-le dans le constructeur de TasksController.
  • Envoie POST /tasks avec { "title": "Buy milk" }, puis GET /tasks, puis DELETE /tasks/99.

Essayez vous-même

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

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

// Faites de cette classe un fournisseur que Nest peut injecter.
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;
    }

    // Déplacez ici la logique de create et de remove du contrôleur.
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de TypeScript et NestJS