我有两个节点项目在同一个数据库上读/写。简单来说,A和B是两个项目。他们都使用 TypeOrm。
项目 A 是一个 API,在某些实体上有订阅者,每次将新行添加到相应的表中时,这些实体都应该发送 websocket。 项目 B 是实际将行保存在数据库中的项目。
问题在于B向数据库发送数据并没有触发A订阅者。我尝试添加项目 A 中的数据,一切正常。
当项目B向数据库添加数据时,如何触发项目A上的函数?
我找到了解决方案,两个项目需要由同一进程运行。这是强制性的,因为在数据库中写入/读取数据时不会激发 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);
获得数据源后,将其提供给其他项目。当其中一个向数据库添加数据时,它将触发另一个中的任何订阅者。