Javascript 雀巢公司可以';无法解析导入模块的依赖关系

Javascript 雀巢公司可以';无法解析导入模块的依赖关系,javascript,typescript,nestjs,Javascript,Typescript,Nestjs,我有四个模块,App->Dog->Access->Mongo(依赖项如箭头所示)。 在应用程序中,MongoDB还与MongooseModule.forRootAsync()连接,然后将其与MongooseModule.forFeature()一起用于MongoModule。 完整的代码可以在这里找到 我想使用通过AccessModule提供的AccessGuard(内部使用MongoModule)在DogModule中提供 使用下面的代码,我会收到此错误消息: [Nest] 31164 -

我有四个模块,App->Dog->Access->Mongo(依赖项如箭头所示)。 在应用程序中,MongoDB还与
MongooseModule.forRootAsync()
连接,然后将其与
MongooseModule.forFeature()一起用于
MongoModule
。 完整的代码可以在这里找到

我想使用通过
AccessModule
提供的
AccessGuard
(内部使用
MongoModule
)在
DogModule
中提供

使用下面的代码,我会收到此错误消息:

[Nest] 31164   - 11/10/2020, 5:11:29 PM   [ExceptionHandler] Nest can't resolve dependencies of the AccessGuard (?). Please make sure that the argument Mongo at index [0] is available in the DogModule context.

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

app.module.ts:

@Module({
  imports: [
    MongooseModule.forRootAsync({
      useFactory: async () => {
        let info = mongod.getInstanceInfo()

        if (!info) {
          await mongod.start()
        }

        info = mongod.getInstanceInfo()

        if (info) {
          return {
            uri: info.uri,
            dbName: "dogsDB",
            useCreateIndex: true,
            promiseLibrary: global.Promise,
            useNewUrlParser: true,
            useUnifiedTopology: true,
            useFindAndModify: false,
          } as MongooseModuleOptions
        }
      },
    }),
    DogModule,
  ],
})
export class AppModule {}
@Module({
  imports: [AccessModule],
  providers: [AccessGuard],
  controllers: [DogController],
})
export class DogModule {}
@Module({
  imports: [MongoModule],
  providers: [AccessGuard],
  exports: [AccessGuard],
})
export class AccessModule {}
dog.module.ts:

@Module({
  imports: [
    MongooseModule.forRootAsync({
      useFactory: async () => {
        let info = mongod.getInstanceInfo()

        if (!info) {
          await mongod.start()
        }

        info = mongod.getInstanceInfo()

        if (info) {
          return {
            uri: info.uri,
            dbName: "dogsDB",
            useCreateIndex: true,
            promiseLibrary: global.Promise,
            useNewUrlParser: true,
            useUnifiedTopology: true,
            useFindAndModify: false,
          } as MongooseModuleOptions
        }
      },
    }),
    DogModule,
  ],
})
export class AppModule {}
@Module({
  imports: [AccessModule],
  providers: [AccessGuard],
  controllers: [DogController],
})
export class DogModule {}
@Module({
  imports: [MongoModule],
  providers: [AccessGuard],
  exports: [AccessGuard],
})
export class AccessModule {}
access.module.ts:

@Module({
  imports: [
    MongooseModule.forRootAsync({
      useFactory: async () => {
        let info = mongod.getInstanceInfo()

        if (!info) {
          await mongod.start()
        }

        info = mongod.getInstanceInfo()

        if (info) {
          return {
            uri: info.uri,
            dbName: "dogsDB",
            useCreateIndex: true,
            promiseLibrary: global.Promise,
            useNewUrlParser: true,
            useUnifiedTopology: true,
            useFindAndModify: false,
          } as MongooseModuleOptions
        }
      },
    }),
    DogModule,
  ],
})
export class AppModule {}
@Module({
  imports: [AccessModule],
  providers: [AccessGuard],
  controllers: [DogController],
})
export class DogModule {}
@Module({
  imports: [MongoModule],
  providers: [AccessGuard],
  exports: [AccessGuard],
})
export class AccessModule {}
access.guard.ts:

@Injectable()
export class AccessGuard implements CanActivate {
  constructor(private mongo: Mongo) {}

  async canActivate(context: ExecutionContext): Promise<boolean> {
    return await this.mongo.hasDog()
  }
}
当我将
MongoModule
添加到
DogModule
时,它会工作。 然而,我想这不是应该的,因为DogModule实际上没有使用
Mongo
类。
DogModule
只需要
AccessModule
中的
AccessGuard
,快速注意:防护装置和其他增强器不需要添加到
提供者
数组中。它们是
@Injectable()。奇怪,我知道,但事情就是这样


如果在模块中使用了保护,那么该模块需要访问保护依赖项,在这种情况下,模块需要有
导入:[MongoModule]
作为
MongoModule
提供
导出
Mongo
@Injectable()
class

这真的很奇怪,因为我为
MongoModule
提取了模块以消除这些依赖关系:(