я не могу получить данные обратно из базы - PullRequest
0 голосов
/ 13 февраля 2019

Я использую базу данных Firebase в реальном времени, и облачные функции Firebase имеют это предупреждение: вы используете Node.js v8.10.0, но Google Cloud Functions поддерживает только v6.11.5. Это мой код для функций в index.js

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp(functions.config().firebase);

exports.addUserMessages = functions.database.ref(`/messages/{messageId}`)
.onWrite( event => {
    const messageKey = event.data.key;
    const messageValue = event.data.val();

    admin.database()
    .ref(`/user-messages/${messageValue.userFromId}/${messageValue.userToId}`)
    .child(messageKey).set(1);
    admin.database()
    .ref(`/user-messages/${messageValue.userToId}/${messageValue.userFromId}`)
    .child(messageKey).set(1);
})

вот мой код службы чата

chat.service.ts

import {forkJoin as observableForkJoin,  Observable } from 'rxjs';
import {take, map, mergeMap} from 'rxjs/operators';
import { Injectable } from '@angular/core';
import { AngularFireDatabase, AngularFireList } from 
'angularfire2/database';
import { Messages } from '../../models/messages/messages.interface';
import { AuthService } from '../auth/auth.service';
import "rxjs/add/observable/forkJoin";
import "rxjs/add/operator/first";
import "rxjs/add/operator/map";
import "rxjs/add/operator/mergeMap";

getChats (userTwoId: string): Observable<Messages[]> {
let database = this.database;
return this.auth.getAuthenticatedUser().pipe(
  map(auth => {
    return auth.uid;
  }),
  mergeMap(uid => {
    console.log('path to list of keys:')
    console.log(`/messages/${uid}/${userTwoId}/`);
    return database.list(`/messages/${uid}/${userTwoId}/`).snapshotChanges();
  }),
  mergeMap(chats => {
    console.log('Log each path to object:');
    const oChats = chats.map(chat => {
      console.log(`/messages/${chat.payload.key}`);
      return <Observable<Messages>> database.list(`/messages/${chat.payload.key}`)
      .valueChanges().pipe(take(1));
    });

    console.log('Log each Obs subscription:')

    oChats.forEach(a => { a.subscribe(b => { console.log(b) }) });
    console.log(oChats);
    return observableForkJoin(oChats);
  }),
);

}

и где я звоню, эта функция находится в

message.ts

import { Component, OnInit } from '@angular/core';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { ManagerProfile } from '../../models/profile/managerProfile.interface';

import { DataService } from '../../providers/data/data.service';
import { Messages } from '../../models/messages/messages.interface';
import { ChatService } from '../../providers/chat/chat.service';
import { Observable } from 'rxjs';
import firebase from 'firebase';

@IonicPage()
@Component({
  selector: 'page-message',
  templateUrl: 'message.html',
})
export class MessagePage {
  
  selectedProfile:  ManagerProfile;
  messageList:Messages[];
  public messageListRef: firebase.database.Reference = firebase.database().ref().child(`messages`);
  
  userId: string;
  userProfile: any;
  
  messages: Observable<Messages[]>
  
  constructor(public navCtrl: NavController, public navParams: NavParams,
    private data: DataService, private chat: ChatService) {}
 

  ionViewWillLoad() {
    this.selectedProfile = this.navParams.get("profile");
    this.data.getAuthenticatedUserProfile()
      .subscribe((profile:  ManagerProfile) => {
        this.userProfile = profile;
        this.userId = profile.key;
      });
      this.chat.getChats(this.selectedProfile.key).subscribe((messages: Messages[]) => {
        this.messageList = messages;
        console.log(messages);
      });

  
  async sendMessage (content: string) {
    try {
      const message: Messages = {   
        userToId: this.selectedProfile.key,
        userToProfile: {
          fullName: this.selectedProfile.fullName
        },
        userFromProfile: {
          fullName: this.userProfile.fullName
        },
        userFromId: this.userId,
        content: content
      }
      await this.chat.sendChat(message);
    }
    catch (e) {
      console.error(e);
    }
  }
  
}

и интерфейс для моих сообщений:

messages.interface.ts

export interface Messages {

    userFromId: string;

    userFromProfile: {
        fullName: string;
    }

    userToId: string;

    userToProfile: {
        fullName: string;
    }
    content: string;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...