FAQ2 min read

Raw body

Raw request body'ga kirishning eng ko'p uchraydigan use-case'laridan biri webhook signature verification qilishdir. Odatda webhook signature'ni tekshirish uchun HMAC hash hisoblash

Raw request body'ga kirishning eng ko'p uchraydigan use-case'laridan biri webhook signature verification qilishdir. Odatda webhook signature'ni tekshirish uchun HMAC hash hisoblashda serializatsiya qilinmagan request body kerak bo'ladi.

Warning

Bu imkoniyat faqat built-in global body parser middleware yoqilgan bo'lsa ishlaydi, ya'ni ilovani yaratishda bodyParser: false uzatmasligingiz kerak.

Express bilan ishlatish

Avval Nest Express ilovasini yaratishda quyidagi opsiyani yoqing:

TypeScript
1import { NestFactory } from '@nestjs/core';
2import type { NestExpressApplication } from '@nestjs/platform-express';
3import { AppModule } from './app.module';
4
5// in the "bootstrap" function
6const app = await NestFactory.create<NestExpressApplication>(AppModule, {
7  rawBody: true,
8});
9await app.listen(process.env.PORT ?? 3000);

Controller ichida raw request body'ga murojaat qilish uchun RawBodyRequest deb nomlangan qulay interface taqdim etilgan. U request ustida rawBody maydonini expose qiladi:

TypeScript
1import { Controller, Post, RawBodyRequest, Req } from '@nestjs/common';
2import { Request } from 'express';
3
4@Controller('cats')
5class CatsController {
6  @Post()
7  create(@Req() req: RawBodyRequest<Request>) {
8    const raw = req.rawBody; // returns a `Buffer`.
9  }
10}

Boshqa parser'ni ro'yxatdan o'tkazish

Standart holatda faqat json va urlencoded parser'lari ro'yxatdan o'tadi. Agar ishlash jarayonida boshqa parser'ni ham qo'shmoqchi bo'lsangiz, buni aniq ko'rsatishingiz kerak.

Masalan, text parser'ni ro'yxatdan o'tkazish uchun quyidagi koddan foydalaning:

TypeScript
1app.useBodyParser('text');
Warning

NestFactory.create chaqiruvida to'g'ri application type uzatayotganingizga ishonch hosil qiling. Express ilovalari uchun to'g'ri type - NestExpressApplication. Aks holda .useBodyParser metodi topilmaydi.

Body parser hajm limiti

Agar ilovangiz Express'ning standart 100kb limitidan kattaroq body'ni parse qilishi kerak bo'lsa, quyidagidan foydalaning:

TypeScript
1app.useBodyParser('json', { limit: '10mb' });

.useBodyParser metodi application options orqali uzatilgan rawBody opsiyasini hisobga oladi.

Fastify bilan ishlatish

Avval Nest Fastify ilovasini yaratishda quyidagi opsiyani yoqing:

TypeScript
1import { NestFactory } from '@nestjs/core';
2import {
3  FastifyAdapter,
4  NestFastifyApplication,
5} from '@nestjs/platform-fastify';
6import { AppModule } from './app.module';
7
8// in the "bootstrap" function
9const app = await NestFactory.create<NestFastifyApplication>(
10  AppModule,
11  new FastifyAdapter(),
12  {
13    rawBody: true,
14  },
15);
16await app.listen(process.env.PORT ?? 3000);

Controller ichida raw request body'ga murojaat qilish uchun RawBodyRequest interface'i bu yerda ham rawBody maydonini expose qiladi:

TypeScript
1import { Controller, Post, RawBodyRequest, Req } from '@nestjs/common';
2import { FastifyRequest } from 'fastify';
3
4@Controller('cats')
5class CatsController {
6  @Post()
7  create(@Req() req: RawBodyRequest<FastifyRequest>) {
8    const raw = req.rawBody; // returns a `Buffer`.
9  }
10}

Boshqa parser'ni ro'yxatdan o'tkazish

Standart holatda faqat application/json va application/x-www-form-urlencoded parser'lari ro'yxatdan o'tadi. Agar boshqa parser'ni ishlash vaqtida qo'shmoqchi bo'lsangiz, buni explicit tarzda bajaring.

Masalan, text/plain parser'ni ro'yxatdan o'tkazish uchun quyidagi koddan foydalaning:

TypeScript
1app.useBodyParser('text/plain');
Warning

NestFactory.create ga to'g'ri application type uzatilayotganiga ishonch hosil qiling. Fastify ilovalari uchun to'g'ri type - NestFastifyApplication. Aks holda .useBodyParser metodi topilmaydi.

Body parser hajm limiti

Agar ilovangiz Fastify'ning standart 1MiB limitidan kattaroq body'ni parse qilishi kerak bo'lsa, quyidagidan foydalaning:

TypeScript
1const bodyLimit = 10_485_760; // 10MiB
2app.useBodyParser('application/json', { bodyLimit });

.useBodyParser metodi application options orqali uzatilgan rawBody opsiyasini hisobga oladi.