Aller au contenu principal

28-3 Ajout de l'action findAll au contrôleur de projets

Test de la route /projets

En accédant à http://localhost:3000/projets dans le navigateur, soit le chemin d'accès de base du contrôleur ProjetsController, vous obtiendrez cette erreur:

http://localhost:3000/projets

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

En effet, nous venons de faire, via le navigateur, une requête HTTP GET pour le chemin /projets et bien que nous ayons un contrôleur d'associé au chemin /projets, aucune action n'est responsable de traiter cette requête.

Conventions NestJS pour les actions

NestJS propose la convention suivante pour les actions de contrôleurs:

VerbeCheminAction du contrôleur
GET/projetsfindAll()
POST/projetscreate()
GET/projets/:idfindOne()
PUT/PATCH/projets/:idupdate()
DELETE/projets/:idremove()

Pour une requête GET à la racine d'une ressource (ex.: /projets), ce qu'on s'attend à recevoir est généralement une liste d'objets puisque la route agit en quelque sorte comme un index. La fonction de contrôleur associée est findAll(), ce qui veut en quelque sorte dire de tout retourner.

info

Les noms d'action du contrôleur (ex.: findAll()) sont purement symboliques et relèvent de la convention plus qu'autre chose. Rien n'empêcherait de nommer index() la fonction responsable de GET /projets. Ou encore de la mettre en français et de la nommer obtenirTous().

Création de l'action GET /projets via une fonction findAll()

  1. Créez une fonction findAll() dans le contrôleur, associée à la méthode HTTP GET.

    src/projets/projets.controller.ts
    @Controller('projets')
    export class ProjetsController {
    @Get()
    findAll() {
    return 'Devrait retourner une liste de projets';
    }
    }

    Nous retournons simplement du texte et en accédant à http://localhost:3000/projets dans le navigateur, nous obtenons en effet le résultat suivant:

    http://localhost:3000/projets

    Devrait retourner une liste de projets

    info

    À noter que ce qui est retourné ici est ce qui est renvoyé dans le body de la réponse HTTP, que ce soit retourné à un navigateur, à Postman ou une application client quelconque.

  2. Changez le retour pour un bloc de texte, mais cette fois-ci contenant du HTML:

    src/projets/projets.controller.ts
    @Controller('projets')
    export class ProjetsController {
    @Get()
    findAll() {
    return '<h1>Devrait retourner une liste de projets</h1>';
    }
    }

    Vous obtiendrez ceci:

    http://localhost:3000/projets

    Devrait retourner une liste de projets

    info

    Le type de réponse est automatiquement ajusté par NestJS en fonction du type de contenu retourné. Ainsi, dans ce cas, le type de réponse dans l'en-tête de la réponse est text/html.

    Imgur

  3. Si, plutôt, vous retournez un objet sous la forme de JSON:

    src/projets/projets.controller.ts
    @Get()
    findAll() {
    const timestamp = new Date().toJSON();
    const projets = [
    {
    id: 1,
    nom: 'LAN Party (NestJS API)',
    description: 'Organiser le LAN Party',
    image_url: 'https://i.imgur.com/Y5nZ4Qe.jpg',
    date_creation: timestamp,
    date_modification: timestamp,
    },
    {
    id: 2,
    nom: 'Discreddit (NestJS API)',
    description: 'Projet de session',
    image_url: 'https://i.imgur.com/Y5nZ4Qe.jpg',
    date_creation: timestamp,
    date_modification: timestamp,
    },
    ];
    return projets;
    }

    La réponse est ajustée pour être de type application/json

    Imgur

Test via Postman

Il n'y a pas de différence entre notre API et celle de Supabase dans la façon d'y accéder. En effet, on peut aussi utiliser Postman pour y accéder et obtenir le résultat sous forme de JSON.

Si vous effectuez une requête via Postman à http://localhost:3000/projets, vous obtiendrez votre liste de projets!

Imgur