Performance (Fastify)
Par défaut, Nest utilise le framework Express. Comme mentionné précédemment, Nest offre également une compatibilité avec d’autres bibliothèques comme, par exemple, Fastify. Nest atteint cette indépendance de framework en implémentant un adaptateur de framework dont la fonction principale est de faire passer les middleware et les gestionnaires aux mises en œuvre spécifiques à chaque bibliothèque.
Fastify offre une bonne alternative pour Nest car il résout des problèmes de conception de manière similaire à Express. Cependant, Fastify est beaucoup plus rapide qu’Express, obtenant presque deux fois de meilleurs résultats lors des benchmarks. Une question légitime est de savoir pourquoi Nest utilise Express comme fournisseur HTTP par défaut ? La raison en est qu’Express est largement utilisé, bien connu et dispose d’un énorme ensemble de middleware compatibles, qui est disponible pour les utilisateurs de Nest dès le départ.
Mais comme Nest offre une indépendance de framework, vous pouvez facilement migrer entre eux. Fastify peut être un meilleur choix lorsque vous accordez une grande importance à des performances très rapides. Pour utiliser Fastify, il vous suffit de choisir l’adaptateur intégré FastifyAdapter
comme indiqué dans ce chapitre.
Installation
Tout d’abord, nous devons installer le package requis :
$ npm i --save @nestjs/platform-fastify
Adaptateur
Une fois la plateforme Fastify installée, nous pouvons utiliser le FastifyAdapter
.
import { NestFactory } from '@nestjs/core';import { FastifyAdapter, NestFastifyApplication,} from '@nestjs/platform-fastify';import { AppModule } from './app.module';
async function bootstrap() { const app = await NestFactory.create<NestFastifyApplication>( AppModule, new FastifyAdapter() ); await app.listen(3000);}bootstrap();
Par défaut, Fastify écoute uniquement sur l’interface localhost 127.0.0.1
(en savoir plus). Si vous souhaitez accepter des connexions sur d’autres hôtes, vous devez spécifier '0.0.0.0'
dans l’appel listen()
:
async function bootstrap() { const app = await NestFactory.create<NestFastifyApplication>( AppModule, new FastifyAdapter(), );
await app.listen(3000, '0.0.0.0');}
Packages spécifiques à la plateforme
Gardez à l’esprit que lorsque vous utilisez le FastifyAdapter
, Nest utilise Fastify comme fournisseur HTTP. Cela signifie que chaque recette reposant sur Express peut ne plus fonctionner. Vous devez plutôt utiliser les packages équivalents de Fastify.
Réponse de redirection
Fastify gère les réponses de redirection légèrement différemment d’Express. Pour effectuer une redirection appropriée avec Fastify, retournez à la fois le code d’état et l’URL, comme suit :
@Get()index(@Res() res) { res.status(302).redirect('/login');}
Options Fastify
Vous pouvez passer des options au constructeur de Fastify via le constructeur FastifyAdapter
. Par exemple :
new FastifyAdapter({ logger: true });
Middleware
Les fonctions middleware récupèrent les objets bruts req
et res
au lieu des wrappers de Fastify. C’est ainsi que fonctionne le package middie
(utilisé en interne) et fastify
- consultez cette page pour plus d’informations.
import { Injectable, NestMiddleware } from '@nestjs/common';import { FastifyRequest, FastifyReply } from 'fastify';
@Injectable()export class LoggerMiddleware implements NestMiddleware { use(req: FastifyRequest['raw'], res: FastifyReply['raw'], next: () => void) { console.log('Request...'); next(); }}
Configuration de route
Vous pouvez utiliser la fonctionnalité de configuration de route de Fastify avec le décorateur @RouteConfig()
.
@RouteConfig({ output: 'hello world' })@Get()index(@Req() req) { return req.routeConfig.output;}
Contraintes de route
À partir de la version v10.3.0, @nestjs/platform-fastify
prend en charge la fonctionnalité de contraintes de route de Fastify avec le décorateur @RouteConstraints
.
@RouteConstraints({ version: '1.2.x' })newFeature() { return 'This works only for version >= 1.2.x';}
Exemple
Un exemple fonctionnel est disponible ici.