NestJS无法解析UsersModule的依赖关系

时间:2018-06-12 17:04:22

标签: typescript nestjs

NestJS无法解析UsersModule的依赖关系。错误: Error: Nest can't resolve dependencies of the UsersModule (?). Please verify whether [0] argument is available in the current context.

app.module.ts:

@Module({
  imports: [
    ConfigModule,
    DatabaseModule,
    GraphQLModule,
    UsersModule,
  ],
  providers: [
    ErrorService,
  ],
  exports: [
    DatabaseModule,
    ErrorService,
  ],
})
export class AppModule implements NestModule {}

users.module.ts:

@Module({
    imports: [
        DatabaseModule,
        ErrorService,
    ],
    providers: [
        UsersService,
        ...usersProviders,
        UserResolver,
    ],
})
export class UsersModule {
    constructor(private readonly errorService: ErrorService) {}
}

问题是这个ErrorService,但是例如数据库模块以类似的方式使用,并且它没有任何错误。我有点困惑)也许有人会帮忙。谢谢。

3 个答案:

答案 0 :(得分:3)

ErrorService未在UsersModule中正确注入。

应该是:

  • providers UsersModule
  • exports
  • 编辑的import个模块中UsersModule

否则,Nest无法解决它。将其添加到exports的{​​{1}}并不能使其全局可用。

我可以看到三种解决方案:

  • 1 - 将AppModule添加到ErrorService的{​​{1}}。但它看起来并不合适,因为我认为/猜测你会在代码的许多其他部分重用这个服务(对吧?)。因此,更好:
  • 2 - 创建一个providers UsersModule ErrorsModule,然后exportsErrorService UsersModule,并且可以注入该服务。

像:

import
  • 3 - 我的最爱,如果您的服务应该重复使用(ErrorsModule会是一个更好的名字吗?如果我的猜测是正确的话),请使用// errors.module.ts @Module({ providers: [ ErrorService ], exports: [ ErrorService ], }) export class ErrorsModule {} // users.module.ts @Module({ imports: [ErrorsModule], }) export class UsersModule { constructor(private readonly errorService: ErrorService) {} } 模块{l} { {1}}仅在主模块LoggerService
  • 中出现一次

示例:

@Global

然后您必须import添加到AppModule的{​​{1}},@Global() @Module({ providers: [LoggerService], exports: [LoggerService], }) export class LoggerModule { constructor(private readonly loggerService: LoggerService) { /* initialize logger, or whatever */ } } 可以在任何地方注入,而无需重新声明。

答案 1 :(得分:0)

您无需导入错误服务,因为该错误服务已被导入到用户模块中,您的代码应如下所示: app.module.ts

  imports: [
    ConfigModule,
    DatabaseModule,
    GraphQLModule,
    UsersModule,
  ],
  providers: [
    ErrorService,
  ],
  exports: [
    DatabaseModule,
  ],
})
export class AppModule implements NestModule {}

user.module.ts

@Module({
    imports: [
        DatabaseModule,
        ErrorService,
    ],
    providers: [
        UsersService,
        ...usersProviders,
        UserResolver,
    ],
})
export class UsersModule {
    constructor(private readonly errorService: ErrorService) {}
}

答案 2 :(得分:0)

就我而言,这是错误地使用了 Inject 函数:

我有这个:

export class UsersModule {
    constructor(
         @Inject()
         private readonly errorService: ErrorService
     ) {}

}

取而代之的是:

export class UsersModule {
    constructor(private readonly errorService: ErrorService) {}
}