NestJS Logo

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 telles que, par exemple, Fastify. Nest réalise cette indépendance vis-à-vis du framework en implémentant un adaptateur de framework dont la fonction principale est de fournir un middleware et des gestionnaires à des implémentations appropriées spécifiques à la bibliothèque.

Astuce Notez que pour qu'un adaptateur de framework soit mis en œuvre, la bibliothèque cible doit fournir un traitement de pipeline requête/réponse similaire à celui que l'on trouve dans Express.

Fastify fournit un bon framework alternatif à Nest car il résout les problèmes de conception d'une manière similaire à Express. Cependant, fastify est bien plus rapide qu'Express, obtenant des résultats presque deux fois meilleurs. Une question légitime est de savoir pourquoi Nest utilise Express comme fournisseur HTTP par défaut ? La raison est qu'Express est largement utilisé, bien connu, et qu'il dispose d'un énorme ensemble de middlewares compatibles, qui sont disponibles pour les utilisateurs de Nest immédiatement.

Mais comme Nest est indépendant du framework, vous pouvez facilement passer de l'un à l'autre. Fastify peut être un meilleur choix lorsque vous accordez une grande importance à des performances très rapides. Pour utiliser Fastify, il suffit de choisir l'adaptateur intégré FastifyAdapter comme montré 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.

main.ts
JS TS

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(process.env.PORT ?? 3000);
}
bootstrap();

Par défaut, Fastify n'écoute que sur l'interface localhost 127.0.0.1 (en savoir plus). Si vous voulez 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 plate-forme#

Gardez à l'esprit que lorsque vous utilisez le FastifyAdapter, Nest utilise Fastify comme fournisseur HTTP. Cela signifie que toutes les recettes qui s'appuient sur Express peuvent ne plus fonctionner. Vous devez, à la place, utiliser des packages équivalents à Fastify.

Réponse de redirection#

Fastify gère les réponses de redirection légèrement différemment d'Express. Pour effectuer une redirection correcte avec Fastify, renvoyez 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 à travers le constructeur FastifyAdapter. Par exemple :


new FastifyAdapter({ logger: true });

Middleware#

Les fonctions du middleware récupèrent les objets req et res bruts au lieu des wrappers de Fastify. C'est ainsi que fonctionne le package middie (qui est utilisé sous le capot) et fastify - consultez cette page pour plus d'informations,

logger.middleware.ts
JS TS

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();
  }
}

import { Injectable } from '@nestjs/common';

@Injectable()
export class LoggerMiddleware {
  use(req, res, next) {
    console.log('Request...');
    next();
  }
}

Configuration de route#

Vous pouvez 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 routes#

Depuis la version 10.3.0, @nestjs/platform-fastify supporte la fonctionnalité de contraintes de routes de Fastify avec le décorateur @RouteConstraints.


@RouteConstraints({ version: '1.2.x' })
newFeature() {
  return 'Cela ne fonctionne que pour les versions >= 1.2.x';
}
Astuce@RouteConfig() et @RouteConstraints sont importés de @nestjs/platform-fastify.

Exemple#

Un exemple concret est disponible ici.

Soutenez-nous

Nest est un projet open source sous licence MIT. Il peut se développer grâce au soutien de ces personnes formidables. Si vous souhaitez les rejoindre, apprenez-en plus ici.

Sponsors Principaux

Trilon LogoMarblism LogoMojam LogoAmplication Logo

Sponsors / Partenaires

Devenir un sponsor