gpt4 book ai didi

multi-tenant - NestJS 请求多个数据库的范围 Multi-Tenancy

转载 作者:行者123 更新时间:2023-12-01 12:06:14 28 4
gpt4 key购买 nike

希望使用 NestJS 6 的新请求注入(inject)范围功能实现 Multi-Tenancy NestJS 解决方案。

对于任何给定的服务,我认为我可以做这样的事情:

@Injectable({scope: Scope.REQUEST})
export class ReportService implements OnModuleInit { ... }

然后,在构造函数中,根据请求确定租户,连接到适当的数据库,并为新连接实例化存储库。

我想知道这是否是最直接的方法?

除了更新每个服务之外,是否可以覆盖连接提供者并将其范围限定为请求?

最佳答案

这就是我们最终要做的...

  • 创建一个简单的全局 TenancyModule绑定(bind)到请求范围:

  • 租户.module.ts
    import { Global, Module, Scope } from '@nestjs/common';
    import { REQUEST } from '@nestjs/core';
    import { getConnection } from 'typeorm';

    const connectionFactory = {
    provide: 'CONNECTION',
    scope: Scope.REQUEST,
    useFactory: (req) => {
    const tenant = someMethodToDetermineTenantFromHost(req.headers.host);
    return getConnection(tenant);
    },
    inject: [REQUEST],
    };

    @Global()
    @Module({
    providers: [connectionFactory],
    exports: ['CONNECTION'],
    })
    export class TenancyModule {}
  • 注入(inject)特定请求 'CONNECTION'进入模块服务,从中检索存储库:

  • 用户服务.ts
    ...
    @Injectable({scope: Scope.REQUEST})
    export class UserService {
    private readonly userRepository: Repository<User>;

    constructor(@Inject('CONNECTION') connection) {
    this.userRepository = connection.getRepository(User);
    }

    关于multi-tenant - NestJS 请求多个数据库的范围 Multi-Tenancy ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56583231/

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