Passer au contenu

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 :

Activation du corps brut avec 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 :

Accès au corps brut dans le contrôleur
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 :

Enregistrement d'un parseur 'text'
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 :

Limite de taille pour le parseur de corps
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 :

Activation du corps brut avec 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 :

Accès au corps brut dans le contrôleur avec Fastify
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 :

Enregistrement d'un parseur 'text/plain'
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 :

Limite de taille pour le parseur de corps avec Fastify
const bodyLimit = 10_485_760; // 10Mo
app.useBodyParser('application/json', { bodyLimit });

La méthode .useBodyParser respectera l’option rawBody qui est passée dans les options de l’application.