Usullar3 min read

Unumdorlik (Fastify)

Nest default holatda Express freymvorkidan foydalanadi. Avval aytilganidek, Nest shuningdek, masalan, Fastify kabi boshqa kutubxonalar bilan ham moslikni taqdim etadi. Nest bu frey

Nest default holatda Express freymvorkidan foydalanadi. Avval aytilganidek, Nest shuningdek, masalan, Fastify kabi boshqa kutubxonalar bilan ham moslikni taqdim etadi. Nest bu freymvorkdan mustaqillikni freymvork adapterini implementatsiya qilish orqali ta'minlaydi; uning asosiy vazifasi middleware va handlerlarni tegishli kutubxona-spetsifik implementatsiyalarga proksi qilishdir.

Hint

Eslatma: freymvork adapterini implementatsiya qilish uchun maqsadli kutubxona Express dagi kabi so'rov/javob pipeline qayta ishlashni taqdim etishi kerak.

Fastify Nest uchun yaxshi muqobil freymvork, chunki u Express dagi kabi dizayn muammolarini o'xshash tarzda hal qiladi. Biroq fastify Express ga qaraganda ancha tezroq, deyarli ikki baravar yaxshi benchmark natijalariga erishadi. Adolatli savol: nega Nest default HTTP provayder sifatida Expressdan foydalanadi? Sababi, Express keng qo'llanadi, yaxshi tanilgan va Nest foydalanuvchilari uchun tayyor bo'lgan juda katta mos middlewarelar to'plamiga ega.

Ammo Nest freymvorkdan mustaqillikni ta'minlagani uchun, ular orasida osongina migratsiya qilishingiz mumkin. Agar siz juda yuqori tezlikdagi unumdorlikni qadrlasangiz, Fastify yaxshiroq tanlov bo'lishi mumkin. Fastifydan foydalanish uchun ushbu bobda ko'rsatilgandek ichki FastifyAdapter ni tanlang.

O'rnatish

Avval kerakli paketni o'rnatamiz:

Terminal
1$ npm i --save @nestjs/platform-fastify

Adapter

Fastify platformasi o'rnatilgach, FastifyAdapter dan foydalanishimiz mumkin.

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

Default holatda Fastify faqat localhost 127.0.0.1 interfeysida tinglaydi (batafsil o'qing). Agar boshqa hostlarda ulanishlarni qabul qilmoqchi bo'lsangiz, listen() chaqiruvida '0.0.0.0' ni ko'rsating:

TypeScript
1async function bootstrap() {
2  const app = await NestFactory.create<NestFastifyApplication>(
3    AppModule,
4    new FastifyAdapter(),
5  );
6  await app.listen(3000, '0.0.0.0');
7}

Platformaga xos paketlar

FastifyAdapter dan foydalanganda, Nest Fastify ni HTTP provayder sifatida ishlatishini yodda tuting. Bu shuni anglatadiki, Expressga tayangan har bir retsept ishlamasligi mumkin. Shuning o'rniga Fastify ga mos paketlardan foydalaning.

Redirect javob

Fastify redirect javoblarni Expressdan bir oz boshqacha boshqaradi. Fastify bilan to'g'ri redirect qilish uchun status kodi va URL ni birga qaytaring, quyidagicha:

TypeScript
1@Get()
2index(@Res() res) {
3  res.status(302).redirect('/login');
4}

Fastify opsiyalari

FastifyAdapter konstruktori orqali Fastify konstruktoriga opsiyalarni uzatishingiz mumkin. Masalan:

TypeScript
1new FastifyAdapter({ logger: true });

Middleware

Middleware funksiyalari Fastify o'ramalari o'rniga xom req va res obyektlarini oladi. middie paketi (u ichki ishlatiladi) shunday ishlaydi va fastify ham shunday - batafsil ma'lumot uchun ushbu sahifani ko'ring,

TypeScript
logger.middleware
1import { Injectable, NestMiddleware } from '@nestjs/common';
2import { FastifyRequest, FastifyReply } from 'fastify';
3
4@Injectable()
5export class LoggerMiddleware implements NestMiddleware {
6  use(req: FastifyRequest['raw'], res: FastifyReply['raw'], next: () => void) {
7    console.log('Request...');
8    next();
9  }
10}

Route Config

Fastify ning route config imkoniyatidan @RouteConfig() dekoratori bilan foydalanishingiz mumkin.

TypeScript
1@RouteConfig({ output: 'hello world' })
2@Get()
3index(@Req() req) {
4  return req.routeConfig.output;
5}

Route Constraints

v10.3.0 dan boshlab, @nestjs/platform-fastify Fastify ning route constraints funksiyasini @RouteConstraints dekoratori bilan qo'llab-quvvatlaydi.

TypeScript
1@RouteConstraints({ version: '1.2.x' })
2newFeature() {
3  return 'This works only for version >= 1.2.x';
4}
Hint

@RouteConfig() va @RouteConstraints@nestjs/platform-fastify paketidan import qilinadi.

Misol

Ishlaydigan misol bu yerda mavjud.