Убацивање услуге из другог Нест.јс модула укључује неколико корака како би се осигурало правилно убризгавање зависности и организација модула. Користећи два узорка модула, научите како функционише процес извоза и увоза услуга.
Преглед садржаја
Генерисање Нест.јс пројекта
Да бисте генерисали Нест.јс пројекат, морате да имате инсталиран ЦЛИ на свом уређају. Ако то не учините, покрените ову команду да бисте је инсталирали:
npm install -g @nestjs/cli
Са инсталираним Нест.јс ЦЛИ, покрените ову команду да бисте генерисали нови Нест.јс пројекат:
nest new <project-name>
Можете заменити „<име-пројекта>” било којим именом које одаберете. Покретање горње команде ће генерисати нови Нест.јс пројекат са наведеним именом.
Ваша тренутна структура пројекта би требало да изгледа као на слици испод:
Да бисте вежбали убацивање услуге из једног модула у други модул, генерисаћете два модула, модул-а и модул-б. Такође ћете генерисати њихове одговарајуће датотеке услуга и контролера.
Покрените ову команду да бисте генерисали модул-а:
nest generate module module-a
И покрените еквивалентну команду за модул-б:
nest generate module module-b
Затим покрените ову команду да генеришете датотеке услуге и контролера за модул-а:
nest generate service module-a && nest generate controller module-a
И покрените еквивалентну команду за модул-б:
nest generate service module-b && nest generate controller module-b
Ваш тренутни директоријум пројекта би требало да изгледа овако, са директоријумима срц/модуле-а и срц/модуле-б:
Извоз услуге из модула А
Да бисте извезли сервис модул-а из модула-а модула, морате га навести као извоз у датотеци модула-а (модуле-а.модуле.тс). Подразумевано, Нест.јс ЦЛИ не обезбеђује низ за извоз у декоратору @Модуле, тако да ће генерисани фајл модула изгледати овако:
import { Module } from '@nestjs/common';
import { ModuleAService } from './module-a.service';
import { ModuleAController } from './module-a.controller';@Module({
providers: [ModuleAService],
controllers: [ModuleAController],
})export class ModuleAModule {}
Да бисте услугу-а (модуле-а.сервице.тс) учинили доступним модулима који увозе модул-а, креирајте низ за извоз у декоратору @Модуле и додајте му МодулеАСервице.
Овако:
import { Module } from '@nestjs/common';
import { ModuleAService } from './module-a.service';
import { ModuleAController } from './module-a.controller';@Module({
providers: [ModuleAService],
controllers: [ModuleAController],
exports: [ModuleAService],
})export class ModuleAModule {}
Затим, у сврху тестирања, додајте једноставну функцију у свој модул-а сервис фајл (модуле-а.сервице.тс):
import { Injectable } from '@nestjs/common';@Injectable()
export class ModuleAService {
getHello(): string {
return 'Hello from Module A!';
}
}
Ова функција враћа узорак стринга. Да бисте потврдили да можете исправно да увезете ову услугу, позваћете ту функцију из модула-б након убацивања услуге-а.
Увоз услуге у модул Б
Да бисте увезли један модул у други, морате га навести као увоз у низу импортова модула који прима. У овом случају, морате додати модул-а у низ импортова @Модуле декоратора модула-б.
Као и раније, Нест.јс ЦЛИ не генерише аутоматски низ за увоз, тако да морате ручно да га додате.
Прво увезите родитељски модул (модуле-а.модуле.тс) у пријемни модул (модуле-б.модуле.тс), креирајте низ импортова и додајте МодулеАМодуле у низ:
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],
})export class ModuleBModule {}
Затим отворите датотеку модуле-б.сервице.тс и увезите Ињецт декоратор и МодулеАСерверице са @нестс/цоммон и ../модуле-а/модуле-а.сервице, респективно:
import { Injectable, Inject } from '@nestjs/common';
import { ModuleAService } from '../module-a/module-a.service';
Декоратор Ињецт означава свој параметар као циљ за убризгавање зависности.
Затим, у класи МодулеБСервице, додајте блок кода испод:
@Inject(ModuleAService)
private readonly moduleAService: ModuleAService;
Блок кода изнад даје вашем МодулеБСервице приступ методама доступним у вашем МодулеАСервице.
Можете тестирати услугу тако што ћете позвати методу гетХелло из МодулеАСервице.
import { Injectable, Inject } from '@nestjs/common';
import { ModuleAService } from 'src/module-a/module-a.service';@Injectable()
export class ModuleBService {
@Inject(ModuleAService)
private readonly moduleAService: ModuleAService;getHello(): string {
return this.moduleAService.getHello();
}
}
Затим отворите датотеку модуле-б.цонтроллер.тс и замените генерисани код блоком кода испод:
import { Controller, Get } from '@nestjs/common';
import { ModuleBService } from './module-b.service';@Controller('module-b')
export class ModuleBController {
constructor(private readonly moduleBService: ModuleBService) {}@Get('/hello')
getHello(): string {
return this.moduleBService.getHello();
}
}
Блок кода изнад поставља ГЕТ руковалац руте за функцију гетХелло.
На крају, направите ГЕТ захтев са цурл за лоцалхост:3000/модуле-б/хелло. Команда треба да одштампа „Здраво из Модула А!“ на вашу конзолу.
Успешно сте убацили услугу у други модул. Ово може бити корисно када правите АПИ-је са Нест.јс-ом који имају више модула који морају да позивају једни друге методе.
Предности убризгавања унакрсних модула
Иако директно позивање услуге из другог модула може изгледати једноставније у почетку, то може довести до сложенијег, мање одрживог и мање скалабилног система на дуге стазе.
Међутим, убризгавање више модула промовише модуларност кода и поновну употребу, што га чини лакшим за одржавање. Поред тога, он централизује зависности, побољшава могућност тестирања и подржава скалабилну, одвојену архитектуру.