在我当前的场景中,第三方将在我的数据库上动态创建表,并将表名称存储为 a varchar,列名称存储jsonb在其他表中,该表在我的 NestJS 后端中定义为实体。
这样我就可以跟踪(和查询)这些表,因为我无法控制它的创建。
为此,我想使用TypeORM而不是使用原始查询,createQueryBuilder因为它更容易使用抽象。
据我所知,TypeORMcreateQueryBuilder需要在子句中定义一个实体from。
像这样的事情:
return await getManager()
.createQueryBuilder()
.select('*')
.from(MyDefinedModel, 'modelAlias')
.getRawMany();
}
Run Code Online (Sandbox Code Playgroud)
所以我想做一些类似的事情:
const tableName = await getDynamicallyGenetaredTableNames().getFirstOne()
// now tableName points to a string that is a table name, i.e 'table-data-192239'
return await getManager()
.createQueryBuilder()
.select('*')
.from(tableName, 'tableAlias')
.getRawMany();
Run Code Online (Sandbox Code Playgroud)
因此,传递表名我指向正确的表,但 TypeORM(和 TS)抱怨,因为这tableName是一个字符串,而不是实体(类)类型
如果有更干净的东西可以实现这一点,我真的不想进行类型转换并开始做一些令人讨厌的事情。我在官方文档中没有找到任何解决方案
有什么绝妙的想法吗?谢谢你们
我正在尝试测试在向我的一个控制器发送请求后,队列会推送一项作业。实现本身按预期工作。
这是我的app.module.ts
@Module({
imports: [
HttpModule,
TypeOrmModule.forRoot(typeOrmConfig),
BullModule.forRoot({
redis: {
host: redisConfig.host,
port: redisConfig.port,
},
}),
// Bunch of unrelated modules
],
providers: [
{
provide: APP_FILTER,
useClass: AllExceptionsFilter,
},
],
controllers: [SomeControllers],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)
这就是我的import.module.ts(使用队列的模块)的样子:
@Module({
imports: [
BullModule.registerQueue({
name: importQueueName.value,
}),
//More unrelated modules,
],
providers: [
//More services, and bull consumer and producer,
ImportDataProducer,
ImportDataConsumer,
ImportDataService,
],
controllers: [ImportDataController],
})
export class ImportDataModule {}
Run Code Online (Sandbox Code Playgroud)
我尝试遵循这种方法
它没有在 beforeAll 钩子中注册队列,我得到了
Driver not …Run Code Online (Sandbox Code Playgroud) 我有一些功能可以使用Gherkin和Cucumber进行测试.问题是执行是随机的,例如,第一个场景是在页面上创建元素,第二个场景是寻找它们,第三个场景是移动它们,所有测试都崩溃,因为执行过程如下:nº9firts,那么8,然后是2,然后......
我没有使用执行标签,或者如果我使用它们,我在"功能:"上面使用它来确保所有方案都在运行
任何人都可以在这里带点光明?