2017-10-20 6 views
0

Je veux interroger firebase à partir de mon serveur, de la même manière que Firebase fonctionne.Utiliser firebase avec variable dans le chemin

Je veux faire quelque chose comme ceci:

const db = firebase.database(); 
const ref = db.ref('something/{some_id}'); 
ref.on('child_added', snap => { 
// Do something 
}, console.error) 

Pour les données comme:

  • quelque chose
    • key1
      • SubKey1
        • données 1
      • subkey2
        • données 2
    • key2
      • subkey3
        • données 3

Et je veux obtenir un événement child_added pour SubKey1, subkey2, subkey3.

Je ne sais pas quelle est la valeur de key1 et key2, et je connais cette sous-clé? sont créés automatiquement par push()

Est-ce possible?

Dans les fonctions de cloud je peux faire quelque chose comme:

functions.database.ref('/something/{some_id}/{subkey}').onWrite(....) 

Je voudrais faire la même chose sur mon propre back-end.

Répondre

1

Il n'y a pas de caractères génériques avec les écouteurs de base de données. Les écouteurs de base de données sont complètement différents des déclencheurs des fonctions du cloud.

Un écouteur de base de données est toujours contraint à la portée du chemin où il a été ajouté. La seule façon de recevoir des événements pour tout ce qui se passe sous un certain emplacement (sans caractères génériques) est d'utiliser un écouteur d'événement value et de répondre à chaque modification apportée à cet emplacement. Et il sera probablement difficile de comprendre ce qui change exactement à chaque événement.

+0

Donc, vous pensez que la déstructuration de la base de données, avec une collection avec la liste des nouveaux enfants modifiés/ajoutés à écouter, et ensuite faire une requête à ce sujet est un bon moyen de résoudre le problème? –

+0

Si vous voulez faire quelque chose une fois pour chaque nœud enfant ajouté, une fonction Cloud est vraiment la meilleure solution. Sinon, déterminez s'il existe un moyen de restreindre l'ensemble des clés qui intéressent un client et n'écoutez que celles-là. –

+1

J'aimerais utiliser des fonctions, mais l'auditeur doit être dans le réseau de mon client, sans accès public pour communiquer avec des serveurs internes. Cela m'a limité à utiliser les fonctions. –