Уверите се да су ваши модули добро организовани са чистим убризгавањем за вишекратну употребу.

Убацивање услуге из другог Нест.јс модула укључује неколико корака како би се осигурало правилно убризгавање зависности и организација модула. Користећи два узорка модула, научите како функционише процес извоза и увоза услуга.

Генерисање Нест.јс пројекта

Да бисте генерисали Нест.јс пројекат, морате да имате инсталиран ЦЛИ на свом уређају. Ако то не учините, покрените ову команду да бисте је инсталирали:

npm install -g @nestjs/cli

Са инсталираним Нест.јс ЦЛИ, покрените ову команду да бисте генерисали нови Нест.јс пројекат:

nest new

Можете заменити „” са било којим именом које одаберете. Покретање горње команде ће генерисати нови Нест.јс пројекат са наведеним именом.

Ваша тренутна структура пројекта би требало да изгледа као на слици испод:

Да бисте вежбали убацивање услуге из једног модула у други модул, генерисаћете два модула, модул-а и модул-б. Такође ћете генерисати њихове одговарајуће датотеке услуга и контролера.

instagram viewer

Покрените ову команду да бисте генерисали модул-а:

nest generate modulemodule-a

И покрените еквивалентну команду за модул-б:

nest generate modulemodule-b

Затим покрените ову команду да генеришете датотеке услуге и контролера за модул-а:

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

И покрените еквивалентну команду за модул-б:

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

Ваш тренутни директоријум пројекта би требало да изгледа овако, са срц/модуле-а и срц/модуле-б директоријуми:

Извоз услуге из модула А

Да бисте извезли услугу модул-а из модула-а модула, морате га навести као извоз у датотеци модула-а (модуле-а.модуле.тс). Подразумевано, Нест.јс ЦЛИ не обезбеђује ан извоза низ у @Модуле декоратер, тако да ће генерисана датотека модула изгледати овако:

// 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{}

Да извршите услугу-а (модуле-а.сервице.тс) доступан модулима који увозе модул-а, креирају ан извоза низ у @Модуле декоратер и додај МодулеАСервице на то.

Овако:

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{}

Затим, у сврху тестирања, додајте једноставну функцију свом модулу - сервисну датотеку (модуле-а.сервице.тс):

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

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

Ова функција враћа узорак стринга. Да бисте потврдили да можете исправно да увезете ову услугу, позваћете ту функцију из модула-б након убацивања услуге-а.

Увоз услуге у модул Б

Да бисте увезли један модул у други, морате га навести као увоз у увози низ пријемног модула. У овом случају, морате додати модул-а у увози низ модула-б @Модуле декоратер.

Као и раније, Нест.јс ЦЛИ не генерише аутоматски увози низ, тако да га морате ручно додати.

Прво увезите родитељски модул (модуле-а.модуле.тс) у пријемни модул (модуле-б.модуле.тс), креирајте увози низ и додајте МодулеАМодуле у низ:

// 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{}

Затим отворите свој модуле-б.сервице.тс датотеку и увозите Убризгајте декоратер и МодулеАСерверице из @нестс/цоммон и ../модуле-а/модуле-а.сервице, редом:

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

Тхе Убризгајте декоратер означава свој параметар као циљ за ињекцију зависности.

Следеће, у вашем МодулеБСервице класе, додајте блок кода испод:

@Inject(ModuleAService)
private readonly moduleAService: ModuleAService;

Блок кода изнад даје вашем МодулеБСервице приступ методама доступним у вашем МодулеАСервице.

Можете тестирати услугу тако што ћете позвати МодулеАСервице гетХелло методом.

// 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();
}
}

Затим отворите свој модуле-б.цонтроллер.тс датотеку и замените генерисани код блоком кода испод:

// 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();
}
}

Горњи блок кода поставља а ДОБИТИ руковалац руте за гетХелло функција.

коначно, направите ГЕТ захтев са цурл-ом на лоцалхост: 3000/модуле-б/хелло. Команда треба да одштампа „Здраво из Модула А!“ на вашу конзолу.

Успешно сте убацили услугу у други модул. Ово може бити од користи када сте прављење АПИ-ја са Нест.јс који имају више модула који треба да позивају једни друге методе.

Предности убризгавања унакрсних модула

Иако директно позивање услуге из другог модула у почетку може изгледати једноставније, дугорочно може довести до сложенијег, мање одрживог и мање скалабилног система.

Међутим, убризгавање више модула промовише модуларност кода и поновну употребу, што га чини лакшим за одржавање. Поред тога, он централизује зависности, побољшава могућност тестирања и подржава скалабилну, одвојену архитектуру.