如何从 Angular 订阅 NestJs Observable?

How to subscribe from Angular to a NestJs Observable?

我正在 angular 7 中使用 Firestore 中的数据库做一个应用程序,但是为了避免云功能,我决定使用 NestJs (5) 作为后端,并且我使用 firebase-admin 事务来保持嵌入式数据同步。当我进行咨询时,一切似乎都运行良好,我的 nestjs 后端负责收集并加入它们以响应我在 angular 中的前端应用程序。但这是我真正的问题:我必须做些什么才能使我在 nestjs return 中的后端成为 angular 前端的可观察对象?

我想实现的是我的前端通过我的后端在NestJs中实时检测到firestore的变化。

简介 我正在 angular 7 中使用 Firestore 中的数据库做一个应用程序,但为了避免云功能,我决定使用 NestJs (5) 作为后端,并且我使用 firebase-admin 事务来保持嵌入式数据同步。当我进行咨询时,一切似乎都运行良好,我的 nestjs 后端负责收集并加入它们以响应我在 angular 中的前端应用程序。但这是我真正的问题:我必须做些什么才能使我在 nestjs return 中的后端成为 angular 前端的可观察对象?

我想实现的是我的前端通过我的后端在NestJs中实时检测到firestore的变化。

我了解到,通过 NestJs,我们可以 return 作为可观察结果,因此您可以从 angular 实时订阅更改。

Firestore -> Nestjs(在 Firebase 函数中运行) -> Angular (.subscribe)

NestJs 中的当前函数:

async getAllAdministratorsForFirestore(): Promise<Administrator[]> {

    const administratorsSnapshot = await administratorsRef.get();
    const administrators = [];
    administratorsSnapshot.forEach(doc => {
      administrators.push(mapFirestoreDocs(doc.id, doc.data()));
    });

    return administrators;
  }

Angular 中的当前消费者:

subscribeToAdministratorsForNestJs() {

    this.http.get(nestJsEndPointUrl, options).subscribe((administrators) => {
      this.administrators = administrators;
    })
  }

我想实现的是我的前端通过我的后端在NestJs中实时检测到firestore的变化。

但是我该怎么做呢?

要实现你想做的事情,你需要NestJs中包含的@nestjs/websockets包和Angular中的ngx-socket-io包。

有了它,您可以订阅当有人连接到生成 NestJs 并通过方法

发送它们的 @WebSocketServer () server 时,您的 firestore 数据库发出的更改
client.broadcast.emit ('change', changes);

从 angular 开始,只有您订阅了事件更改:

this.socket.fromEvent ('change'). subscribe ((changes) => console.log (changes));

就是这样;),建议当连接到该套接字的用户为 0 时,取消订阅 firestore 数据库中的更改。