alaskafx
@alaskafx
Не .do Frontend

Правильно ли это и как будет правильно?

Сейчас у меня есть 3 контроллера, 3 сущности, 3 сервиса и 3 модуля.
Дело сейчас у меня обстоит так, что в одном из сервисом мне нужно обратиться к другому соответственно, но nest сказал что-то вроде: ты забыл подключить ещё и энтити, ведь во втором его нет.
В итоговом виде это всё выглядит так, будто один за одним подключаются сервисы и сущности в модулях, где в конечном модуле подключены уже почти все сервисы, из-за некоторого пере использования.

Вот сам пример:

PurchaseModule.ts
import { Module } from '@nestjs/common';
import { PurchaseController } from './PurchaseController';
import { PurchaseService } from './PurchaseService';
import { TypeOrmModule } from '@nestjs/typeorm';
import { paymentsEntity } from './purchasedEntity';
import { userEntity } from '../userAuthorization/userEntity';
import { userService } from '../userAuthorization/user.service';
import { ConfigModule } from '@nestjs/config';
import { ForgotEntity } from '../userAuthorization/forgotEntity';


@Module({
  imports: [
    ConfigModule.forRoot(),
    TypeOrmModule.forFeature([paymentsEntity, userEntity, ForgotEntity]),
  ],
  exports: [TypeOrmModule],
  controllers:[PurchaseController],
  providers: [PurchaseService, userService]
})
export class PurchaseModule{}


userModule.ts
import {Module} from '@nestjs/common';
import { userController } from './user.controller';
import { userService } from './user.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { userEntity } from './userEntity';
import { ForgotEntity } from './forgotEntity';

@Module({
  imports: [
    TypeOrmModule.forFeature([userEntity, ForgotEntity]),
  ],
  exports: [TypeOrmModule],
  controllers: [userController],
  providers: [userService]
})

export class userModule{}


Здесь наглядно видно, как я тащу из модуля к модулю энтити ForgotEntity, который используется только в userService.
Если я удалю его из PurchaseModule, то Nest скажет мне, что этот энтити используется в userService, а значит, он должен быть и здесь!

Это нормальный подход или как делать иначе?
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
Grapeoff
@Grapeoff
В чём концепция...?
Если вы хотите использовать провайдеры из одного модуля в другом, используйте массив exports: []

@Module({
  imports: [
    TypeOrmModule.forFeature([UserEntity, ForgotEntity]),
  ],
  controllers: [UserController],
  providers: [UserService],
  exports: [UserService] // Экспортируем зависимости данного модуля.
})
export class UserModule{}

@Module({
  imports: [
    TypeOrmModule.forFeature([PaymentsEntity]),
    UserModule // Импортируем его сдесь. Теперь в пределах данного модуля нам доступен UserService.
  ],
  controllers: [PurchaseController],
  providers: [PurchaseService]
})
export class PurchaseModule {}

Ну и не забывайте про nest'овский стайлгайд: все модули, сервисы, контроллеры, энтити, в общем — классы именуем с большой буквы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы