Убацивање Нест.јс услуге из другог модула

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

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

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

 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/модуле-б/хелло. Команда треба да одштампа „Здраво из Модула А!“ на вашу конзолу.

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

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

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

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