Récupérer les données (Paramètres)
Un contrôleur qui ne reçoit aucune donnée, c'est rare. Tu as besoin de lire le body pour créer une ressource, ou les params pour savoir quel ID supprimer.
Au lieu d'utiliser l'objet req brut et de tout extraire manuellement, utilise ces décorateurs pour injecter exactement ce dont tu as besoin dans ta méthode.
Liste des Décorateurs
| Décorateur | Source Fastify | Usage |
|---|---|---|
@Body() | req.body | Le payload JSON envoyé par le client (POST/PUT). |
@Param(key?) | req.params | Les variables dans l'URL (ex: /:id). |
@Query(key?) | req.query | Les paramètres après le ? (ex: ?page=2). |
@Headers(key?) | req.headers | Les en-têtes de la requête. |
@Req() | req | L'objet FastifyRequest complet (si tu as besoin de bas niveau). |
@Res() | res | L'objet FastifyReply complet (pour gérer des streams ou formats exotiques). |
Extraction partielle (La clé 🔑)
Pour @Param, @Query et @Headers, tu peux passer une chaîne de caractères pour récupérer uniquement la valeur qui t'intéresse. C'est plus propre !
// ❌ Moins bien : on récupère tout l'objet
@Get('/:id')
findOne(@Param() params: any) {
return this.service.find(params.id);
}
// ✅ Mieux : on cible la donnée
@Get('/:id')
findOne(@Param('id') id: string) {
return this.service.find(id);
}
Exemple Complet
@Post('/:groupId/users')
async addUserToGroup(
@Param('groupId') groupId: string, // Vient de l'URL
@Body() userData: any, // Vient du JSON Body
@Query('admin') makeAdmin: boolean, // Vient de ?admin=true
@Headers('authorization') token: string // Vient du Header
) {
console.log(`Ajout user dans le groupe ${groupId}`);
}