#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
вместо этого.