Aller au contenu principal

Middlewares

Les middlewares sont des fonctions qui s'exécutent avant les Guards et avant le Contrôleur. Ils ont accès aux objets bruts Request et Reply de Fastify.

C'est l'endroit idéal pour :

  • Le Logging (tracer les requêtes).
  • Le Parsing (modifier le body).
  • Ajouter des Headers globaux.
  • Décoder un Token JWT et l'attacher à req.user.

Deux façons de faire

Le framework supporte deux styles de middlewares : fonctionnel (simple) et classe (puissant).

1. Middleware Fonctionnel (Le plus simple)

Juste une fonction. Rapide et efficace.

import { MiddlewareHandler } from 'my-fastify-decorators';

export const LoggerMiddleware: MiddlewareHandler = (req, res) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
// Pas besoin de "next()", la fin de la fonction passe la main.
};

2. Middleware de Classe (Avec Injection)

Si ton middleware a besoin de dépendances (ex: appeler la BDD), utilise une classe.

import { MiddlewareClass, Service, Inject } from 'my-fastify-decorators';

@Service()
export class AuthMiddleware implements MiddlewareClass {

@Inject(AuthService)
private authService!: AuthService;

async use(req: any, res: any) {
const token = req.headers.authorization;
if (token) {
const user = await this.authService.validate(token);
req.user = user; // On attache le user pour la suite !
}
}
}

Appliquer un Middleware (@Middleware)

Comme pour les Guards, tu peux les scoper.

import { Controller, Get, Middleware } from 'my-fastify-decorators';

@Controller('/cats')
@Middleware(LoggerMiddleware) // S'applique à toutes les routes
export class CatsController {

@Get()
@Middleware(AuthMiddleware) // S'applique en PLUS ici
findAll() {
return 'Miaou';
}
}