0
votes

I inject 3 services in my controller: one is declared as provider inside the controller's module (AnswerModule), the 2 other services are declared in other modules (QuizesModule and QuestionsModule). I import these modules in AnswerModule. Here the error

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 */ ]
  })

Here are the modules: 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)

Thanks for your help, I do not understand my settings in modules seem correct

Laurent

2

2 Answers

0
votes

exports: [QuizesService], at QuizesModule

The AnswersModule uses this service. So we need to expose it.

0
votes

Thanks for your answer now it works Here is the fix... I export QUizesService in QuizesModule, I export AuthModule in QUizesModule, I export QuestionsService in 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 {}