やりたいことを説明したい。DB からデータベース構成を取得して接続したい。理解を深めるために例を挙げたほうがよいでしょう。DB Aには3つのデータベースA、B、Cがあり、DB BおよびCには、userName、password、およびdbName(BD BおよびBD CのuserNameなど)などの構成情報が格納されています。私は両方の DB (B と C) にユーザーを持っています。たとえば、David の認証資格情報はデータベース B にあり、Justin の認証資格情報はデータベース C にあります
だから私はいくつかのコードを書いたが、エラーが発生する
私の書いたコード:
app.module.ts で
UsersModule にはストア DB 構成のエンティティがあります => 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構成を動的に取得するための2つのファイルがあります
dynamic-db-config.service.ts で
サービス (UsersService) を使用して、request.paramsに基づいて DB 資格情報を取得します(DB 名を送信します)
@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);
}
}
dynamic-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`
})
```
どこで私は間違えましたか?