NestJS 无法解析 AuthServices 的依赖关系
Posted
技术标签:
【中文标题】NestJS 无法解析 AuthServices 的依赖关系【英文标题】:NestJS can't resolve dependencies of the AuthServices 【发布时间】:2019-12-19 18:33:30 【问题描述】:first problem with JWT_MODULE_OPTION 之后,回到我认为已经解决的老问题。事实证明,当我“修复”旧问题时,会使用 JWT 创建新问题。
所以又无法编译:
Nest 无法解析 AuthService(?、RoleRepository、JwtService)的依赖关系。请确保索引 [0] 处的参数在 AppModule 上下文中可用。 +25 毫秒
这真的很奇怪,因为这种方式适用于我的另一个项目并且无法理解我错在哪里。这是auth.service.ts:
@Injectable()
export class AuthService
constructor(
@InjectRepository(User) private readonly userRepo: Repository<User>,
@InjectRepository(Role) private readonly rolesRepo: Repository<Role>,
private readonly jwtService: JwtService,
)
它得到了角色和jwtService
,但问题出在User
,路径是正确的。这是app.module.ts:
@Module(
imports: [
TypeOrmModule.forRootAsync(
imports: [ConfigModule, AuthModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => (
type: configService.dbType as any,
host: configService.dbHost,
port: configService.dbPort,
username: configService.dbUsername,
password: configService.dbPassword,
database: configService.dbName,
entities: ['./src/data/entities/*.ts'],
),
),
],
controllers: [AppController, AuthController],
providers: [AuthService],
)
export class AppModule
对于控制器和提供者有相同的编译错误 & 无法理解出了什么问题...
【问题讨论】:
【参考方案1】:您可能缺少 TypeOrmModule.forFeature([User])
导入。通常,所有实体都导入到专用功能模块中。如果您只有一个模块(即AppModule
),除了forRoot
导入之外,您还需要将forFeature
导入那里。
@Module(
imports: [
TypeOrmModule.forRootAsync(...),
TypeOrmModule.forFeature([User, Role]),
],
【讨论】:
你是对的,谢谢。在我以前的项目中,我在 CoreModule 的 forFeature 中有所有实体。但是,当在 forFeature 中添加用户和角色时,AuthService 会收到另一个编译错误:Nest 无法解析 AuthService 的依赖项(UserRepository、RoleRepository、?)。请确保索引 [2] 处的参数在 AppModule 上下文中可用。 +21ms 我尝试在 forFeature 中添加 jwtService 但不起作用... 我添加了 - 注入:[ConfigService, JwtService],认为现在还可以,但是出现新错误...jwtService
与TypeormModule
无关。当您导入JwtModule
时,它会暴露JwtService
;但仅在具有导入的模块中。查看此线程以了解如何导出服务以在其他模块中使用它:***.com/questions/51819504/…
是的,当注入 JwtService 时会收到此错误 --- Nest 无法解析 TypeOrmModuleOptions (ConfigService, ?) 的依赖关系。请确保索引 [1] 处的参数在 TypeOrmCoreModule 上下文中可用。 +25ms --- 如果我会解决这个问题,回到 AuthService 错误...【参考方案2】:
全局问题是我尝试添加 AuthService 和 AuthController 两次。所以我将它们从 app.module.ts 中删除,然后从 auth.module.ts 中导出 AuthService:
【讨论】:
以上是关于NestJS 无法解析 AuthServices 的依赖关系的主要内容,如果未能解决你的问题,请参考以下文章
使用 Typeorm 连接到 Nestjs 中的 mssql,但 Nest 无法解析 EmployeeRepository 的依赖关系
NestJS 错误:错误:Nest 无法解析 AuthService (?, JwtService) 的依赖项
NestJS / TypeOrm / Neo4j :Nest 无法解析 NEO4J_DRIVER 的依赖关系
sequelize-typescript - 当使用带有 `tsc` 编译器(带有 NestJS)的 glob 配置时,无法解析模型模块