Как подписаться с Angular на NestJs Observable? - PullRequest
1 голос
/ 26 марта 2019

Я делаю приложение на angular 7 с базой данных в Firestore, но чтобы избежать облачных функций, я решил использовать backend с NestJs (5) и использую транзакции firebase-admin для синхронизации синхронизированных встроенных данных. Кажется, что все работает хорошо, когда я провожу консультации, мой бэкэнд nestjs отвечает за их сбор и присоединение к ним, чтобы они отвечали на мою внешнюю заявку на английском языке. Но вот мой реальный вопрос: что мне нужно сделать, чтобы мой back-end в nestjs возвратил наблюдаемое в угловой интерфейс?

Чего я хочу добиться, так это чтобы мой фронт обнаруживал изменения в реальном времени в пожарном депо через мой бэкэнд в NestJs.

Введение Я делаю приложение на angular 7 с базой данных в Firestore, но чтобы избежать облачных функций, я решил использовать backend с NestJs (5) и использую транзакции firebase-admin для синхронизации синхронизированных встроенных данных. Кажется, что все работает хорошо, когда я провожу консультации, мой бэкэнд nestjs отвечает за их сбор и присоединение к ним, чтобы они отвечали на мою внешнюю заявку на английском языке. Но вот мой реальный вопрос: что мне нужно сделать, чтобы мой back-end в nestjs возвратил наблюдаемую угловую оболочку?

Чего я хочу добиться, так это чтобы мой фронт обнаруживал изменения в реальном времени в пожарном депо через мой бэкэнд в NestJs.

Я понимаю, что из NestJs мы можем вернуться в результате наблюдаемой, так что из 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;
    })
  }

Чего я хочу добиться, так это чтобы мой фронт обнаруживал изменения в реальном времени в пожарном депо через мой бэкэнд в NestJ.

Но как мне это сделать?

1 Ответ

1 голос
/ 26 марта 2019

Чтобы достичь того, что вы хотите сделать, вам нужен пакет @nestjs/websockets, который входит в NestJs, и пакет ngx-socket-io в Angular.

С этим вы можете подписаться на изменения, которые выдает ваша база данных firestore, когда кто-то подключается к @WebSocketServer () server, который генерирует NestJs и отправляет их через метод

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

и только из angular вы подписываетесь на изменение события:

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

И это все;), предложение, когда пользователи, подключенные к этому сокету, равны 0, отписаться от изменений в базе данных firestore.

...