Temiz, yeniden kullanılabilir enjeksiyonla modüllerinizin iyi organize edildiğinden emin olun.

Farklı bir Nest.js modülünden hizmet enjekte etmek, bağımlılığın uygun şekilde eklenmesini ve modül organizasyonunu sağlamak için birkaç adım içerir. İki örnek modül kullanarak hizmetleri içe ve dışa aktarma sürecinin nasıl çalıştığını öğrenin.

Nest.js Projesi Oluşturma

Nest.js projesi oluşturmak için cihazınızda CLI'nin yüklü olması gerekir. Bunu yapmazsanız, yüklemek için bu komutu çalıştırın:

npm install -g @nestjs/cli

Nest.js CLI yüklüyken yeni bir Nest.js projesi oluşturmak için bu komutu çalıştırın:

nest new

değiştirebilirsiniz””Seçtiğiniz herhangi bir adla. Yukarıdaki komutu çalıştırmak, belirtilen adda yeni bir Nest.js projesi oluşturacaktır.

Mevcut proje yapınız aşağıdaki resimdeki gibi görünmelidir:

Bir modülden farklı bir modüle hizmet enjekte etme alıştırması yapmak için modül-a ve modül-b olmak üzere iki modül oluşturacaksınız. Ayrıca bunlara karşılık gelen hizmet ve denetleyici dosyalarını da oluşturacaksınız.

instagram viewer

Modül-a'yı oluşturmak için bu komutu çalıştırın:

nest generate modulemodule-a

Ve modül-b için eşdeğer komutu çalıştırın:

nest generate modulemodule-b

Daha sonra modül-a için hizmet ve denetleyici dosyalarını oluşturmak üzere bu komutu çalıştırın:

nest generate service module-a && nest generate controller module-a

Ve modül-b için eşdeğer komutu çalıştırın:

nest generate service module-b && nest generate controller module-b

Mevcut proje dizininiz şu şekilde görünmelidir: kaynak/modül-a Ve kaynak/modül-b dizinler:

Bir Hizmeti Modül A'dan Dışa Aktarma

Modül-a hizmetini modül-a modülünden dışa aktarmak için, bunu modül-a'nın modül dosyasında dışa aktarma olarak listelemeniz gerekir (modül-a.module.ts). Varsayılan olarak Nest.js CLI, ihracat dizideki @Modül dekoratör, böylece oluşturulan modül dosyası şöyle görünecektir:

// module-a.module.ts
import { Module } from'@nestjs/common';
import { ModuleAService } from'./module-a.service';
import { ModuleAController } from'./module-a.controller';

@Module({
providers: [ModuleAService],
controllers: [ModuleAController],
})

exportclassModuleAModule{}

Servis-a yapmak için (modül-a.service.ts) modül-a'yı içe aktaran modüller tarafından erişilebilir, bir ihracat dizideki @Modül dekoratör ve ekle ModülHizmet ona.

Şöyle:

import { Module } from'@nestjs/common';
import { ModuleAService } from'./module-a.service';
import { ModuleAController } from'./module-a.controller';

@Module({
providers: [ModuleAService],
controllers: [ModuleAController],
exports: [ModuleAService],
})

exportclassModuleAModule{}

Daha sonra, test amacıyla modülünüze basit bir işlev ekleyin: hizmet dosyası (modül-a.service.ts):

import { Injectable } from'@nestjs/common';

@Injectable()
exportclassModuleAService{
getHello(): string {
return'Hello from Module A!';
}
}

Bu işlev örnek bir dize döndürür. Bu hizmeti doğru bir şekilde içe aktarabildiğinizi doğrulamak için, hizmet-a'yı enjekte ettikten sonra modül-b'den bu işlevi çağıracaksınız.

Bir Hizmeti Modül B'ye Aktarma

Bir modülü diğerine aktarmak için onu içe aktarma olarak listelemeniz gerekir. ithalat alıcı modülün dizisi. Bu durumda modül-a'yı eklemeniz gerekir. ithalat modül-b dizisi @Modül dekoratör.

Daha önce olduğu gibi Nest.js CLI otomatik olarak bir ithalat dizi, bu yüzden onu manuel olarak eklemelisiniz.

İlk önce ana modülü içe aktarın (modül-a.module.ts) alıcı modüle (modül-b.module.ts), oluşturun ithalat dizi ve ekle ModülAModül diziye:

// module-b.module.ts
import { Module } from'@nestjs/common';
import { ModuleBController } from'./module-b.controller';
import { ModuleBService } from'./module-b.service';
import { ModuleAModule } from'../module-a/module-a.module';

@Module({
imports: [ModuleAModule],
controllers: [ModuleBController],
providers: [ModuleBService],
})

exportclassModuleBModule{}

Ardından, cihazınızı açın modül-b.service.ts dosyalayın ve içe aktarın Enjekte et dekoratör ve ModülAServis itibaren @nests/ortak Ve ../modül-a/modül-a.hizmet, sırasıyla:

import { Injectable, Inject } from'@nestjs/common';
import { ModuleAService } from'../module-a/module-a.service';

Enjekte et dekoratör, parametresini bağımlılık enjeksiyonu için bir hedef olarak işaretler.

Daha sonra, sizin ModülBHizmet class'a aşağıdaki kod bloğunu ekleyin:

@Inject(ModuleAService)
private readonly moduleAService: ModuleAService;

Yukarıdaki kod bloğu, ModuleAService'inizde bulunan yöntemlere ModuleBService erişiminizi sağlar.

ModuleAService’i arayarak hizmeti test edebilirsiniz. Merhaba yöntem.

// module-b.service.ts
import { Injectable, Inject } from'@nestjs/common';
import { ModuleAService } from'src/module-a/module-a.service';

@Injectable()
exportclassModuleBService{
@Inject(ModuleAService)
private readonly moduleAService: ModuleAService;

getHello(): string {
returnthis.moduleAService.getHello();
}
}

Ardından, cihazınızı açın modül-b.controller.ts Dosyalayın ve oluşturulan kodu aşağıdaki kod bloğuyla değiştirin:

// module-b.controller.ts
import { Controller, Get } from'@nestjs/common';
import { ModuleBService } from'./module-b.service';

@Controller('module-b')
exportclassModuleBController{
constructor(private readonly moduleBService: ModuleBService) {}

@Get('/hello')
getHello(): string {
returnthis.moduleBService.getHello();
}
}

Yukarıdaki kod bloğu bir ELDE ETMEK için rota işleyicisi Merhaba işlev.

Nihayet, curl ile GET isteği yap localhost'a: 3000/module-b/hello. Komutun “Modül A'dan Merhaba!” yazması gerekir. konsolunuza.

Başka bir modüle başarıyla bir hizmet enjekte ettiniz. Bu, şu durumlarda işinize yarayabilir: Nest.js ile API'ler oluşturma birbirlerinin yöntemlerini çağırması gereken birden fazla modüle sahip.

Çapraz Modül Enjeksiyonunun Faydaları

Doğrudan başka bir modülden hizmet çağırmak ilk başta daha basit görünse de uzun vadede daha karmaşık, bakımı daha az ve daha az ölçeklenebilir bir sisteme yol açabilir.

Bununla birlikte, çapraz modül enjeksiyonu, kod modülerliğini ve yeniden kullanılabilirliğini destekleyerek bakımı kolaylaştırır. Ayrıca bağımlılıkları merkezileştirir, test edilebilirliği artırır ve ölçeklenebilir, ayrıştırılmış bir mimariyi destekler.