我想解释我想做什么。我想从数据库中获取数据库配置并连接到它。最好举个例子更好地理解。我在 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`
})
```
我哪里做错了?