Aller au contenu principal

28-2 Création d'un contrôleur ProjetsController

Le module seul ne fait pas grand-chose, il ne permet que de regrouper ensemble les classes (contrôleurs, services, entités, etc.) liées à une fonctionnalité.

Pour recevoir des requêtes, les traiter et retourner une réponse, il nous faut un contrôleur.

Imgur

Un contrôleur est responsable de:

  • Recevoir les requêtes HTTP
  • Associer une action à effectuer en fonction de la méthode (ex.: GET, POST) et du chemin (/projets/2)
  • Faire appel à un ou plusieurs services pour la logique applicative liée à la requête
  • Retourner une réponse

Créer un contrôleur Projets

Pour créer un contrôleur, on peut utiliser le CLI de Nest, tout comme lors de la création du module:

nest g controller projets

Vérification des changements apportés

Automatiquement, le contrôleur a été créé sous le dossier du module Projets (src/projets/projets.controller.ts) et dans ProjetsModule, le nouveau contrôleur a été ajouté à la liste des contrôleurs faisant partie du module:

src/projets/projets.module.ts
@Module({
controllers: [ProjetsController]
})
export class ProjetsModule {}
info

Lors de la création d'un contrôleur, si un module portant le même nom existe, Nest assignera automatiquement le contrôleur au module. S'il n'y avait pas eu de module Projets, le contrôleur aurait simplement été ajouté à la racine du projet comme AppController

De plus, vous remarquerez qu'un fichier de test a été créé (src/projets/projets.controller.spec.ts). Nous verrons plus tard tout ce qui a trait aux tests, mais sachez qu'il s'agit d'un fichier utilisé dans le contexte des tests automatisés.

Détails du contrôleur et chemin d'accès de base

Le contrôleur est vide pour le moment, mais remarquez le décorateur @Controller, accompagné du préfixe projets en paramètre:

src/projets/projets.controller.ts
@Controller('projets')
export class ProjetsController {}

Le paramètre projets passé au décorateur signifie que le chemin d'accès de base pour toutes les actions de ce contrôleur sera /projets.

Nous pourrons définir des chemins plus spécifiques pour certaines actions/fonctions (ex.: utiliser un paramètre dynamique :id pour recevoir un id), mais ces actions auront toujours comme préfixe /projets.