0

我想解释我想做什么。我想从数据库中获取数据库配置并连接到它。最好举个例子更好地理解。我在 DB A 中有 3 个数据库 A、B、C 存储 DB B 和 C 配置信息,例如用户名、密码和 dbName(BD B 和 BD C 的用户名等)。我在两个数据库(B 和 C)中都有用户,例如 David 身份验证凭据在数据库 B 中,而 Justin 身份验证凭据在数据库 C 中,当 David 想要对后端进行身份验证时,应该连接到 DB B 然后获取他的凭据

所以我写了一些代码,但我得到了一个错误

我写的代码:

在 app.module.ts

UsersModule 有一个实体用于存储数据库配置 => DB A PlayersModule 有一个实体用于存储用户凭据 => DB B(David auth 凭据保存在此处)


    @Module({
      imports: [
        TypeOrmModule.forRoot(),
        TypeOrmModule.forRootAsync({
          useClass: DynamicDbConfigService,
        }),
        ConfigModule.forRoot(),
        UsersModule,
        PlayersModule,
        DynamicDbConfigModule,
      ],
      controllers: [AppController],
      providers: [AppService],
    })
    export class AppModule {}

这是 ormconfig js 文件


    module.exports = {
      name: 'default',
      type: 'mysql',
      host: process.env.DB_HOST,
      port: process.env.DB_PORT,
      username: process.env.DB_USERNAME,
      password: process.env.BD_PASSWORD,
      database: process.env.DB_NAME,
      entities: ['dist/**/*.entity{.ts,.js}'],
      synchronize: true,
    };

我有两个文件用于动态获取数据库配置

在动态 db-config.service.ts

我使用服务(UsersService)根据request.params获取数据库凭据(发送数据库名称)


    @Injectable({ scope: Scope.REQUEST })
    export class DynamicDbConfigService implements TypeOrmOptionsFactory {
      constructor(
        @Inject(REQUEST) private readonly request: Request,
        private usersService: UsersService,
      ) {}
    
      createTypeOrmOptions(
        connectionName?: string,
      ): Promise<TypeOrmModuleOptions> | TypeOrmModuleOptions {
        return this.usersService.getServerDetail(this.request.params.serverName);
      }
    }

动态 db-config.module.ts


    @Module({
      imports: [UsersModule],
      providers: [DynamicDbConfigService],
      exports: [DynamicDbConfigService],
    })
    export class DynamicDbConfigModule {}

users.service.ts


    async getServerDetail(serverName): Promise<TypeOrmModuleOptions> {
        const dbDetail = await this.userRepository.findOne({
          where: { dbName: serverName },
        });
        return {
          name: 'dynamicDB',
          database: dbDetail.dbName,
          host: 'localhost',
          username: 'bla bla bla',
          password: 'bla bla bla',
          type: 'mysql',
          port: 3306,
        };
      }

这是 users.module.ts


    @Module({
      imports: [TypeOrmModule.forFeature([User])],
      controllers: [UsersController],
      providers: [UsersService],
      exports: [UsersService],
    })
    export class UsersModule {}

因此,当我想运行此代码时,我在 dynamic-db-config.service.ts 中收到 usersService 错误

错误是:

```
Error: Nest can't resolve dependencies of the DynamicDbConfigService (REQUEST, ?). Please make sure that the argument UsersService at index [1] is available in the TypeOrmCoreModule context.

Potential solutions:
- If UsersService is a provider, is it part of the current TypeOrmCoreModule?
- If UsersService is exported from a separate @Module, is that module imported within TypeOrmCoreModule?
  @Module({
    imports: [ /* the Module containing UsersService */ ]`enter code here`
  })

```

我哪里做错了?

4

0 回答 0