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,但是例如数据库模块以类似的方式使用,并且它没有任何错误。我有点困惑)也许有人会帮忙。谢谢。
答案 0 :(得分:3)
ErrorService
未在UsersModule
中正确注入。
应该是:
providers
UsersModule
exports
import
个模块中UsersModule
否则,Nest无法解决它。将其添加到exports
的{{1}}并不能使其全局可用。
我可以看到三种解决方案:
AppModule
添加到ErrorService
的{{1}}。但它看起来并不合适,因为我认为/猜测你会在代码的许多其他部分重用这个服务(对吧?)。因此,更好:providers
UsersModule
ErrorsModule
,然后exports
将ErrorService
UsersModule
,并且可以注入该服务。 像:
import
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) {}
}