Menu
CoddyTech

Bonjour, Nest

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

Dans Express, chaque route est une fonction que tu enregistres manuellement. NestJS attribue à chaque partie d’une API sa propre classe, et les décorateurs indiquent à Nest le rôle de chaque classe.

@Controller('books')
export class BooksController {
    @Get()
    findAll() {
        return [{ title: 'Dune' }];
    }
}

Un contrôleur traite les requêtes correspondant à un chemin. @Controller('books') et @Get() sont des décorateurs. Un décorateur commence par @ et se trouve sur la ligne au-dessus d’une classe ou d’une méthode, pour indiquer à Nest à quoi elle sert. Les décorateurs de Nest se terminent toujours par (), même si rien ne se trouve à l’intérieur. Ensemble, ils associent findAll à GET /books, et Nest envoie la valeur renvoyée par la méthode au format JSON avec le statut 200. Nest n’envoie jamais de requête à une méthode qui n’a pas de décorateur de route.

Un module répertorie les classes qui vont ensemble. src/main.ts appelle NestFactory.create(AppModule) ; AppModule importe TasksModule, qui répertorie TasksController. Sur un ordinateur portable, tu le lancerais avec npm run start ; ici, le bouton Run s’en charge.

Dans le projet de départ, interface Task décrit les champs d’un objet tâche, et Task[] désigne un tableau de ces objets. private garde un champ à l’intérieur de sa classe. Un type placé après les parenthèses d’une méthode décrit la valeur qu’elle renvoie. Ces annotations aident TypeScript à vérifier ton code ; les décorateurs de Nest définissent les routes.

challenge icon

Défi

Facile

Ton premier serveur Nest contient déjà trois tâches, mais aucune route ne les renvoie encore. Ajoute la route qui les liste.

  1. Ouvre src/tasks/tasks.controller.ts. La classe TasksController contient la liste dans this.tasks. @Controller('tasks'), au-dessus de la classe, lui confie la gestion des chemins commençant par /tasks.
  2. À l’emplacement du commentaire, ajoute une méthode (appelle-la findAll) et marque-la avec @Get(). Elle renvoie this.tasks. Nest renvoie ce que la méthode retourne au format JSON, avec le statut 200.
  3. Get vient de @nestjs/common, comme Controller. Ajoute-le à l’importation de la première ligne.

Essaie : appuie sur « Jouer », puis envoie GET /tasks. Tu obtiens le statut 200 et les trois tâches :

[
  { "id": 1, "title": "Write the README", "done": true },
  { "id": 2, "title": "Fix the login bug", "done": false },
  { "id": 3, "title": "Plan the sprint", "done": false }
]

Envoie ensuite GET /task, sans le s. Aucune route ne correspond à ce chemin, donc Nest répond avec le statut 404 :

{ "message": "Cannot GET /task", "error": "Not Found", "statusCode": 404 }

Essayez vous-même

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

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

@Controller('tasks')
export class TasksController {
    private tasks: Task[] = [
        { id: 1, title: 'Write the README', done: true },
        { id: 2, title: 'Fix the login bug', done: false },
        { id: 3, title: 'Plan the sprint', done: false },
    ];

    // Ajoutez ici une méthode qui répond à GET /tasks avec la liste.
}
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

Entraînez-vous par vous-même : Playground Express