Nest JS Внедрение зависимостей завершается неудачно для импортированных модулей - PullRequest
0 голосов
/ 21 апреля 2020

Я внедряю 3 службы в моем контроллере: одна объявлена ​​в качестве поставщика внутри модуля контроллера (AnswerModule), 2 другие службы объявлены в других модулях (QuizesModule и QuestionsModule). Я импортирую эти модули в AnswerModule. Здесь ошибка

Error: Nest can't resolve dependencies of the AnswersController (AnswersService, ?, QuestionsService). Please make sure that the argument QuizesService at index [1] is available in the AnswersModule context.

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

Вот модули: QuizesModule

@Module({
  imports: [ AuthModule, 
    MongooseModule.forFeature([{ name: 'Quiz', schema: QuizSchema }]),
    ],
  controllers: [QuizesController],
  providers: [QuizesService],

})
export class QuizesModule {}

QuestionsModule:

@Module({
  imports: [QuizesModule, MongooseModule.forFeature([{ name: 'Question', schema: QuestionSchema }])],
  controllers: [QuestionsController],
  providers: [QuestionsService],
  exports: [QuizesModule]
})
export class QuestionsModule {}

AnswerModule

@Module({
  imports: [QuizesModule, QuestionsModule, MongooseModule.forFeature([{ name: 'Answer', schema: AnswerSchema }])],
  controllers: [AnswersController],
  providers: [AnswersService,]
})
export class AnswersModule {}

Stacktrace:

Error: Nest can't resolve dependencies of the AnswersController (AnswersService, ?, QuestionsService). Please make sure that the argument QuizesService at index [1] is available in the AnswersModule context.

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

    at Injector.lookupComponentInParentModules (/Users/laurent/Projects/perso/nestjs-elearning/node_modules/@nestjs/core/injector/injector.js:191:19)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async Injector.resolveComponentInstance (/Users/laurent/Projects/perso/nestjs-elearning/node_modules/@nestjs/core/injector/injector.js:147:33)
    at async resolveParam (/Users/laurent/Projects/perso/nestjs-elearning/node_modules/@nestjs/core/injector/injector.js:101:38)
    at async Promise.all (index 1)
    at async Injector.resolveConstructorParams (/Users/laurent/Projects/perso/nestjs-elearning/node_modules/@nestjs/core/injector/injector.js:116:27)
    at async Injector.loadInstance (/Users/laurent/Projects/perso/nestjs-elearning/node_modules/@nestjs/core/injector/injector.js:80:9)
    at async Injector.loadController (/Users/laurent/Projects/perso/nestjs-elearning/node_modules/@nestjs/core/injector/injector.js:28:9)
    at async Promise.all (index 0)
    at async InstanceLoader.createInstancesOfControllers (/Users/laurent/Projects/perso/nestjs-elearning/node_modules/@nestjs/core/injector/instance-loader.js:51:9)
    at async /Users/laurent/Projects/perso/nestjs-elearning/node_modules/@nestjs/core/injector/instance-loader.js:29:13
    at async Promise.all (index 12)
    at async InstanceLoader.createInstances (/Users/laurent/Projects/perso/nestjs-elearning/node_modules/@nestjs/core/injector/instance-loader.js:26:9)
    at async InstanceLoader.createInstancesOfDependencies (/Users/laurent/Projects/perso/nestjs-elearning/node_modules/@nestjs/core/injector/instance-loader.js:16:9)
    at async /Users/laurent/Projects/perso/nestjs-elearning/node_modules/@nestjs/core/nest-factory.js:81:17
    at async Function.asyncRun (/Users/laurent/Projects/perso/nestjs-elearning/node_modules/@nestjs/core/errors/exceptions-zone.js:17:13)

Спасибо за вашу помощь, я не понимаю, мои настройки в модулях кажутся правильными

Laurent

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Спасибо за ваш ответ, теперь он работает. Вот исправление ... Я экспортирую QUizesService в QuizesModule, я экспортирую AuthModule в QUizesModule, я экспортирую QuestionsService в QuestionsModule

@Module({
  imports: [ AuthModule, 
    MongooseModule.forFeature([{ name: 'Quiz', schema: QuizSchema }]),
    ],
  controllers: [QuizesController],
  providers: [QuizesService],
  //...quizesProviders, ...usersProviders]
  exports: [QuizesService, AuthModule]
})
export class QuizesModule {}

QUestionsModule

@Module({
  imports: [QuizesModule, MongooseModule.forFeature([{ name: 'Question', schema: QuestionSchema }])],
  controllers: [QuestionsController],
  providers: [QuestionsService],
  exports: [QuestionsService]
})
export class QuestionsModule {}
0 голосов
/ 21 апреля 2020

экспорт: [QuizesService], в модуле QuizesModule

Модуль ответов использует этот сервис. Поэтому нам нужно это разоблачить.

...