NestJS 无法解析 UsersModule 的依赖关系
NestJS Cannot resolve dependencies of the UsersModule
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,但是例如数据库模块以类似的方式使用,并且它没有任何错误地工作。我有点困惑)也许有人会帮忙。谢谢。
ErrorService
未正确注入 UsersModule
.
它应该是:
- 在
UsersModule
的providers
- 在一个模块的
exports
中 import
编辑者 UsersModule
否则Nest无法解析。将它添加到 AppModule
的 exports
中也不会使它全局可用。
我可以看到三个解决方案:
- 1 - 将
ErrorService
添加到 UsersModule
的 providers
。但这看起来不是正确的方式,因为我 think/guess 您将在代码的许多其他部分重用此服务(对吗?)。因此,更好:
- 2 - 创建一个
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) {}
}
- 3 - 我最喜欢的,如果您的服务应该被重用(
LoggerService
是更好的名字吗?如果我的猜测是正确的),使用 @Global
模块,您将 import
在你的主模块中只有一次 (AppModule
)
示例:
@Global()
@Module({
providers: [LoggerService],
exports: [LoggerService],
})
export class LoggerModule {
constructor(private readonly loggerService: LoggerService) { /* initialize logger, or whatever */ }
}
然后你必须将LoggerModule
添加到AppModule
的imports
,并且LoggerService
将可以在任何地方注射而无需重新声明它。
您不需要导入错误服务,因为它已经导入到用户模块中您的代码应该是这样的:
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) {}
}
在我的例子中,注入函数的使用有误:
我有这个:
export class UsersModule {
constructor(
@Inject()
private readonly errorService: ErrorService
) {}
}
而不是这个:
export class UsersModule {
constructor(private readonly errorService: ErrorService) {}
}
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,但是例如数据库模块以类似的方式使用,并且它没有任何错误地工作。我有点困惑)也许有人会帮忙。谢谢。
ErrorService
未正确注入 UsersModule
.
它应该是:
- 在
UsersModule
的providers
- 在一个模块的
exports
中import
编辑者UsersModule
否则Nest无法解析。将它添加到 AppModule
的 exports
中也不会使它全局可用。
我可以看到三个解决方案:
- 1 - 将
ErrorService
添加到UsersModule
的providers
。但这看起来不是正确的方式,因为我 think/guess 您将在代码的许多其他部分重用此服务(对吗?)。因此,更好: - 2 - 创建一个
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) {}
}
- 3 - 我最喜欢的,如果您的服务应该被重用(
LoggerService
是更好的名字吗?如果我的猜测是正确的),使用@Global
模块,您将import
在你的主模块中只有一次 (AppModule
)
示例:
@Global()
@Module({
providers: [LoggerService],
exports: [LoggerService],
})
export class LoggerModule {
constructor(private readonly loggerService: LoggerService) { /* initialize logger, or whatever */ }
}
然后你必须将LoggerModule
添加到AppModule
的imports
,并且LoggerService
将可以在任何地方注射而无需重新声明它。
您不需要导入错误服务,因为它已经导入到用户模块中您的代码应该是这样的: 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) {}
}
在我的例子中,注入函数的使用有误:
我有这个:
export class UsersModule {
constructor(
@Inject()
private readonly errorService: ErrorService
) {}
}
而不是这个:
export class UsersModule {
constructor(private readonly errorService: ErrorService) {}
}