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.