Nest.js TypeORM如何根据标头在运行时切换数据库连接?

3

我有两个数据库,想根据我发送的http请求头使用其中一个。

有人知道我如何在Nest中动态切换TypeORM连接吗?谢谢!

2个回答

4

使用Nestjs处理多个数据库非常容易。官方文档提供了很好的设置说明https://docs.nestjs.com/techniques/database#multiple-databases

首先,您可以在AppModule中注册您的数据库。

const defaultOptions = {
  type: 'postgres',
  port: 5432,
  username: 'user',
  password: 'password',
  database: 'db',
  synchronize: true,
};

@Module({
  imports: [
    TypeOrmModule.forRoot({
      ...defaultOptions,
      name: 'db_1',
      host: 'host_1',
      entities: [Entity1],
    }),
    TypeOrmModule.forRoot({
      ...defaultOptions,
      name: 'db_2',
      host: 'host_2',
      entities: [Entity2],
    })
  ],
})
export class AppModule {}

通过这样做,您可以注入您的连接并在它们之间进行选择。

@Module({
  imports: [
    TypeOrmModule.forFeature([Entity1], 'db_1'),
    TypeOrmModule.forFeature([Entity2], 'db_2'),
  ],
})
export class AppModule {}

@Injectable()
export class PersonService {
  constructor(
    @InjectRepository('db_1')
    private readonly repo_1: Repository<Entity1>,
    @InjectRepository('db_2')
    private readonly repo_2: Repository<Entity2>,
  ) {}

  public fetchData(db_1: boolean) {
    if (db_1) {
      return this.repo_1.find();
    }
    return this.repo_2.find();
  }
}


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接