multi-tenant之NestJS 请求多个数据库的范围 Multi-Tenancy
Terrylee
阅读:51
2024-12-31 21:38:35
评论:0
希望使用 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 {}
'CONNECTION'
进入模块服务,从中检索存储库:用户服务.ts
...
@Injectable({scope: Scope.REQUEST})
export class UserService {
private readonly userRepository: Repository<User>;
constructor(@Inject('CONNECTION') connection) {
this.userRepository = connection.getRepository(User);
}
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。