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:
{ "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:
| Verbe | Chemin | Action du contrôleur |
|---|---|---|
| GET | /projets | findAll() |
| POST | /projets | create() |
| GET | /projets/:id | findOne() |
| PUT/PATCH | /projets/:id | update() |
| DELETE | /projets/:id | remove() |
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.
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()
-
Créez une fonction
findAll()dans le contrôleur, associée à la méthode HTTPGET.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/projetsdans le navigateur, nous obtenons en effet le résultat suivant:http://localhost:3000/projetsDevrait retourner une liste de projets
infoÀ noter que ce qui est retourné ici est ce qui est renvoyé dans le
bodyde la réponse HTTP, que ce soit retourné à un navigateur, à Postman ou une application client quelconque. -
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/projetsDevrait retourner une liste de projets
infoLe 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.
-
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
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!
