项目之间的TypeOrm订阅者

问题描述 投票:0回答:1

我有两个节点项目在同一个数据库上读/写。简单来说,A和B是两个项目。他们都使用 TypeOrm。

项目 A 是一个 API,在某些实体上有订阅者,每次将新行添加到相应的表中时,这些实体都应该发送 websocket。 项目 B 是实际将行保存在数据库中的项目。

问题在于B向数据库发送数据并没有触发A订阅者。我尝试添加项目 A 中的数据,一切正常。

当项目B向数据库添加数据时,如何触发项目A上的函数?

node.js nestjs typeorm
1个回答
0
投票

我找到了解决方案,两个项目需要由同一进程运行。这是强制性的,因为在数据库中写入/读取数据时不会激发 TypeOrm 订阅者,而是使用 DataSource 对象时激发。

因此,您基本上必须在项目之间共享相同的 DataSource 实例。在 NestJs 中,这可以通过从 appModule 中提取 DataSource 来完成:

const app = await NestFactory.create(AppModule, {
  logger: new CustomLogger('NEST'),
});

const appModule = app.select(AppModule);
const data = appModule.get(DataSource);

获得数据源后,将其提供给其他项目。当其中一个向数据库添加数据时,它将触发另一个中的任何订阅者。

© www.soinside.com 2019 - 2024. All rights reserved.