Уверите се да су ваши модули добро организовани са чистим убризгавањем за вишекратну употребу.
Убацивање услуге из другог Нест.јс модула укључује неколико корака како би се осигурало правилно убризгавање зависности и организација модула. Користећи два узорка модула, научите како функционише процес извоза и увоза услуга.
Генерисање Нест.јс пројекта
Да бисте генерисали Нест.јс пројекат, морате да имате инсталиран ЦЛИ на свом уређају. Ако то не учините, покрените ову команду да бисте је инсталирали:
npm install -g @nestjs/cli
Са инсталираним Нест.јс ЦЛИ, покрените ову команду да бисте генерисали нови Нест.јс пројекат:
nest new
Можете заменити „
Ваша тренутна структура пројекта би требало да изгледа као на слици испод:
Да бисте вежбали убацивање услуге из једног модула у други модул, генерисаћете два модула, модул-а и модул-б. Такође ћете генерисати њихове одговарајуће датотеке услуга и контролера.
Покрените ову команду да бисте генерисали модул-а:
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/модуле-б/хелло. Команда треба да одштампа „Здраво из Модула А!“ на вашу конзолу.
Успешно сте убацили услугу у други модул. Ово може бити од користи када сте прављење АПИ-ја са Нест.јс који имају више модула који треба да позивају једни друге методе.
Предности убризгавања унакрсних модула
Иако директно позивање услуге из другог модула у почетку може изгледати једноставније, дугорочно може довести до сложенијег, мање одрживог и мање скалабилног система.
Међутим, убризгавање више модула промовише модуларност кода и поновну употребу, што га чини лакшим за одржавање. Поред тога, он централизује зависности, побољшава могућност тестирања и подржава скалабилну, одвојену архитектуру.