Discovery service
@nestjs/core paketidan taqdim etiladigan DiscoveryService - bu NestJS ilovasida provayderlar, kontrollerlar va boshqa metadatalarni dinamik tarzda ko'rib chiqish va olish imkonini
@nestjs/core paketidan taqdim etiladigan DiscoveryService - bu NestJS ilovasida provayderlar, kontrollerlar va boshqa metadatalarni dinamik tarzda ko'rib chiqish va olish imkonini beruvchi kuchli yordamchi vosita. Bu ayniqsa runtime introspeksiyasiga tayanadigan plaginlar, dekoratorlar yoki ilg'or funksiyalarni yaratishda foydali. DiscoveryService dan foydalanish orqali dasturchilar yanada moslashuvchan va modulli arxitekturalarni yaratishi, ilovalarda avtomatlashtirish va dinamik xatti-harakatlarni yoqishi mumkin.
Boshlash
DiscoveryService dan foydalanishdan oldin, uni ishlatmoqchi bo'lgan modulga DiscoveryModule ni import qilishingiz kerak. Bu servis dependency injection orqali mavjud bo'lishini ta'minlaydi. Quyida NestJS modulida uni qanday sozlash ko'rsatilgan:
1import { Module } from '@nestjs/common';
2import { DiscoveryModule } from '@nestjs/core';
3import { ExampleService } from './example.service';
4
5@Module({
6 imports: [DiscoveryModule],
7 providers: [ExampleService],
8})
9export class ExampleModule {}Modul sozlangandan so'ng, DiscoveryService ni dinamik discovery kerak bo'lgan istalgan provayder yoki servisga in'eksiya qilish mumkin.
1@Injectable()
2export class ExampleService {
3 constructor(private readonly discoveryService: DiscoveryService) {}
4}Provayderlar va kontrollerlarni topish
DiscoveryService ning asosiy imkoniyatlaridan biri - ilovadagi barcha ro'yxatdan o'tgan provayderlarni olish. Bu provayderlarni muayyan shartlarga ko'ra dinamik qayta ishlashda foydali. Quyidagi parcha barcha provayderlarga qanday kirishni ko'rsatadi:
1const providers = this.discoveryService.getProviders();
2console.log(providers);Har bir provayder obyektida uning instansiyasi, tokeni va metadatasi kabi ma'lumotlar bo'ladi. Xuddi shuningdek, ilovadagi barcha ro'yxatdan o'tgan kontrollerlarni olish kerak bo'lsa, buni quyidagicha qilishingiz mumkin:
1const controllers = this.discoveryService.getControllers();
2console.log(controllers);Bu imkoniyat kontrollerlarni dinamik qayta ishlash kerak bo'lgan holatlarda, masalan, analitika kuzatuvi yoki avtomatik ro'yxatdan o'tkazish mexanizmlarida ayniqsa foydali.
Metadatalarni ajratib olish
Provayderlar va kontrollerlarni topishdan tashqari, DiscoveryService ushbu komponentlarga biriktirilgan metadatalarni olish imkonini ham beradi. Bu ayniqsa runtime paytida metadata saqlaydigan maxsus dekoratorlar bilan ishlaganda qimmatli.
Masalan, maxsus dekorator provayderlarni muayyan metadata bilan belgilaydigan holatni ko'rib chiqaylik:
1import { DiscoveryService } from '@nestjs/core';
2
3export const FeatureFlag = DiscoveryService.createDecorator();Ushbu dekoratorni servisga qo'llash keyinchalik so'ralishi mumkin bo'lgan metadatalarni saqlash imkonini beradi:
1import { Injectable } from '@nestjs/common';
2import { FeatureFlag } from './custom-metadata.decorator';
3
4@Injectable()
5@FeatureFlag('experimental')
6export class CustomService {}Shu tarzda metadata provayderlarga biriktirilgach, DiscoveryService belgilangan metadata bo'yicha provayderlarni filtrlashni osonlashtiradi. Quyidagi kod parchasida muayyan metadata qiymati bilan belgilangan provayderlarni qanday olish ko'rsatilgan:
1const providers = this.discoveryService.getProviders();
2
3const [provider] = providers.filter(
4 (item) =>
5 this.discoveryService.getMetadataByDecorator(FeatureFlag, item) ===
6 'experimental',
7);
8
9console.log(
10 'Providers with the "experimental" feature flag metadata:',
11 provider,
12);Xulosa
DiscoveryService - NestJS ilovalarida runtime introspeksiyasini yoqadigan ko'p qirrali va kuchli vosita. Provayderlar, kontrollerlar va metadatalarni dinamik tarzda topish imkonini bergani uchun, u kengaytiriladigan freymvorklar, plaginlar va avtomatlashtirishga yo'naltirilgan funksiyalarni qurishda muhim rol o'ynaydi. Provayderlarni skan qilish va qayta ishlash, ilg'or qayta ishlash uchun metadatalarni ajratib olish yoki modulli va masshtablanadigan arxitekturalarni yaratish kerak bo'lsa, DiscoveryService bu maqsadlarga erishish uchun samarali va tartibli yondashuvni taqdim etadi.