Corps brut
L’un des cas d’utilisation les plus courants pour avoir accès au corps brut de la requête est la vérification des signatures de webhook. En général, pour effectuer des validations de signature de webhook, le corps de la requête non sérialisé est nécessaire pour calculer un hachage HMAC.
Utilisation avec Express
Tout d’abord, activez l’option lors de la création de votre application Nest Express :
import { NestFactory } from '@nestjs/core';import { NestExpressApplication } from '@nestjs/platform-express';import { AppModule } from './app.module';
// dans la fonction "bootstrap"const app = await NestFactory.create<NestExpressApplication>(AppModule, { rawBody: true,});await app.listen(3000);
Pour accéder au corps brut de la requête dans un contrôleur, une interface pratique RawBodyRequest
est fournie pour exposer un champ rawBody
sur la requête : utilisez le type d’interface RawBodyRequest
:
import { Controller, Post, RawBodyRequest, Req } from '@nestjs/common';import { Request } from 'express';
@Controller('cats')class CatsController { @Post() create(@Req() req: RawBodyRequest<Request>) { const raw = req.rawBody; // retourne un `Buffer`. }}
Enregistrement d’un parseur différent
Par défaut, seuls les parseurs json
et urlencoded
sont enregistrés. Si vous souhaitez enregistrer un parseur différent à la volée, vous devez le faire explicitement.
Par exemple, pour enregistrer un parseur text
, vous pouvez utiliser le code suivant :
app.useBodyParser('text');
Limite de taille du parseur de corps
Si votre application a besoin de parser un corps plus grand que le défaut de 100ko
d’Express, utilisez ce qui suit :
app.useBodyParser('json', { limit: '10mb' });
La méthode .useBodyParser
respectera l’option rawBody
qui est passée dans les options de l’application.
Utilisation avec Fastify
Tout d’abord, activez l’option lors de la création de votre application Nest Fastify :
import { NestFactory } from '@nestjs/core';import { FastifyAdapter, NestFastifyApplication,} from '@nestjs/platform-fastify';import { AppModule } from './app.module';
// dans la fonction "bootstrap"const app = await NestFactory.create<NestFastifyApplication>( AppModule, new FastifyAdapter(), { rawBody: true, },);await app.listen(3000);
Pour accéder au corps brut de la requête dans un contrôleur, une interface pratique RawBodyRequest
est fournie pour exposer un champ rawBody
sur la requête : utilisez le type d’interface RawBodyRequest
:
import { Controller, Post, RawBodyRequest, Req } from '@nestjs/common';import { FastifyRequest } from 'fastify';
@Controller('cats')class CatsController { @Post() create(@Req() req: RawBodyRequest<FastifyRequest>) { const raw = req.rawBody; // retourne un `Buffer`. }}
Enregistrement d’un parseur différent
Par défaut, seuls les parseurs application/json
et application/x-www-form-urlencoded
sont enregistrés. Si vous souhaitez enregistrer un parseur différent à la volée, vous devez le faire explicitement.
Par exemple, pour enregistrer un parseur text/plain
, vous pouvez utiliser le code suivant :
app.useBodyParser('text/plain');
Limite de taille du parseur de corps
Si votre application a besoin de parser un corps plus grand que le défaut de 1Mo
de Fastify, utilisez ce qui suit :
const bodyLimit = 10_485_760; // 10Moapp.useBodyParser('application/json', { bodyLimit });
La méthode .useBodyParser
respectera l’option rawBody
qui est passée dans les options de l’application.