Импортируйте модуль, который имеет динамический модуль в качестве зависимости в nest.js

#nestjs #nest-dynamic-modules

Вопрос:

Я новичок nest.js и пытаюсь использовать сервис из модуля Q в модуле приложений. Q модуль импортирует динамику BullModule для очереди …

q.модуль.ts

 import { BullModule } from '@nestjs/bull';
import { Module } from '@nestjs/common';
import { join } from 'path';
import { QService } from './q.service';

@Module({
  imports: [
    BullModule.registerQueue({
      name: 'volume',
      processors: [
        {
          name: 'create',
          path: join(__dirname, 'vol.processor.js'),
        },
      ],
    }),
  ],
  providers: [QService],
})
 

приложение.модуль.ts

 const ENV = process.env.NODE_ENV;
@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: !!ENV ? `.env.${ENV}` : '.env',
    }),
    BullModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => ({
        redis: {
          host: configService.get('REDIS_HOST'),
          port: Number(configService.get('REDIS_PORT')),
          password: configService.get('REDIS_PASSWORD'),
        },
      }),
      inject: [ConfigService],
    }),
    IdentityModule,
    QModule,
  ],
  controllers: [AppController],
  providers: [
    AppService,
    IdentityService,
    QService,
  ],
})
export class AppModule {}
 

Нест говорит:

 Nest can't resolve dependencies of the QService (?). Please make sure that the argument BullQueue_volume at index [0] is available in the AppModule context.

Potential solutions:
- If BullQueue_volume is a provider, is it part of the current AppModule?
- If BullQueue_volume is exported from a separate @Module, is that module imported within AppModule?
  @Module({
    imports: [ /* the Module containing BullQueue_volume */ ]
  })
 

Как я могу справиться с этим?
Я прочитал некоторые документы, но не могу найти 🙁

Комментарии:

1. покажите нам QService , что constructor

Ответ №1:

Вместо того , чтобы переопределять QService в AppModule «s providers «, QModule следует иметь QService в обоих providers и exports . Это позволит любому модулю imports: [QModule] использовать экспорт QModule без необходимости переопределения поставщика.

В качестве примечания, каждый раз, когда вы добавляете поставщика в providers массив модуля, это будет новый экземпляр указанного поставщика. В данном случае есть два экземпляра, и AppModule пользователь хочет получить доступ ко всему QService , что ему нужно. Вот почему вы должны использовать exports вместо этого.