gpt4 book ai didi

typescript - 如何将 NestJS 中的服务注入(inject) typeorm 存储库?

转载 作者:行者123 更新时间:2023-12-03 16:17:31 25 4
gpt4 key购买 nike

我有一个 UserRepository它处理在数据库前面创建/验证用户。我想对用户的密码执行散列和验证,所以我为此目的创建了一个单独的服务,试图遵循单一的责任原则,声明如下:

@Injectable()
export default class HashService

我将它导入到我的模块中:
@Module({
imports: [TypeOrmModule.forFeature([UserRepository])],
controllers: [AuthController],
providers: [AuthService, HashService],
})
export class AuthModule {}

我希望将其注入(inject) UserRepository ,我尝试将它作为构造函数参数传递,但它不起作用,因为它的基类已经接受了 2 个参数,所以我尝试像这样在它们之后注入(inject)我的服务:
@EntityRepository(User)
export default class UserRepository extends Repository<User> {
constructor(
entityManager: EntityManager,
entityMetadata: EntityMetadata,
@Inject() private readonly hashService: HashService,
) {
super();
}

// Logic...
}

但是 hashService未定义,我也尝试不使用 @Inject()装饰师。
注入(inject) HashService的最佳方法是什么?进入我的存储库?我必须创建它的新实例吗?

最佳答案

简短的回答:你没有。
TypeORM 的自定义存储库、存储库类和实体在技术上位于 Nest 的 DI 系统之外,因此无法向其中注入(inject)任何值。如果你真的想去做,你可以弄清楚 Repository 是什么类需要它的构造函数参数并将它们添加到工厂以实例化存储库类并直接使用它而不是通过 TypeOrmModule.forFeature ,但这是相当多的额外工作。
在我看来,自定义存储库模式在 Nest 中并没有太大帮助,因为服务本质上持有 CustomRepository 的逻辑。将。存储库类是您通往数据库的门户,但不需要向它们添加任何额外的逻辑。

关于typescript - 如何将 NestJS 中的服务注入(inject) typeorm 存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60347894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com