如何从Angular订阅NestJs Observable?

时间:2019-03-26 01:58:36

标签: angular google-cloud-firestore observable subscribe nestjs

我正在用Firestore中的数据库在angular 7中开发一个应用程序,但是为了避免云功能,我决定使用NestJs(5)进行后端,并且使用firebase-admin事务来保持嵌入式数据同步。当我进行咨询时,一切似乎都工作正常,我的nestjs后端负责收集并加入它们,以对我的前端应用程序进行响应。但是,这是我真正的问题:我该怎么做才能使我在nestjs中的后端返回一个可观察到的有角度的前端?

我想实现的目标是,我的前台可以通过我的NestJs后端实时检测Firestore的变化。

引言我正在用角度7在Firestore中使用数据库做一个应用程序,但是为了避免云功能,我决定使用NestJs(5)进行后端,并且使用firebase-admin事务来保持嵌入式数据同步。当我进行咨询时,一切似乎都工作正常,我的nestjs后端负责收集并加入它们,以对我的前端应用程序进行响应。但是,这是我真正的问题:我该怎么做才能使我在nestjs中的后端返回一个可观察到的有角度的前端?

我想实现的目标是,我的前台可以通过我的NestJs后端实时检测Firestore的变化。

我了解到,通过NestJs,我们可以返回可观察到的结果,因此您可以从角度实时订阅更改。

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的变化。

但是我该怎么做?

1 个答案:

答案 0 :(得分:1)

要实现所需的功能,您需要NestJs中包含的@nestjs/websockets软件包和Angular中的ngx-socket-io软件包。

有了它,您可以订阅当有人连接到生成NestJs并通过方法发送它们的@WebSocketServer () server时,firestore数据库发出的更改。

client.broadcast.emit ('change', changes);

并且只有您订阅了事件更改:

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

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