nur*_*abe 5 multi-tenant nestjs
希望使用 NestJS 6 的新请求注入范围功能实现多租户 NestJS 解决方案。
对于任何给定的服务,我假设我可以做这样的事情:
@Injectable({scope: Scope.REQUEST})
export class ReportService implements OnModuleInit { ... }
Run Code Online (Sandbox Code Playgroud)
然后,在构造函数中,根据请求确定租户,连接到适当的数据库,并为新连接实例化存储库。
我想知道这是否是最直接的方法?
是否可以覆盖连接提供程序和请求范围,而不是更新每个服务?
nur*_*abe 10
这就是我们最终要做的......
TenancyModule绑定到请求范围:租户.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 {}
Run Code Online (Sandbox Code Playgroud)
'CONNECTION'于请求的模块服务注入到从中检索存储库的模块服务中:用户服务.ts
...
@Injectable({scope: Scope.REQUEST})
export class UserService {
private readonly userRepository: Repository<User>;
constructor(@Inject('CONNECTION') connection) {
this.userRepository = connection.getRepository(User);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3848 次 |
| 最近记录: |