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';
}
}