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.
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:
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:
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:
1app.useBodyParser('text');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:
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:
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:
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:
1app.useBodyParser('text/plain');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:
1const bodyLimit = 10_485_760; // 10MiB
2app.useBodyParser('application/json', { bodyLimit });.useBodyParser metodi application options orqali uzatilgan rawBody opsiyasini hisobga oladi.