2017-02-05 11 views
0

Ich habe ein Problem mit meiner Firebase DB. Ich habe die folgende Struktur:Lesen von Firebase Realtime DB mit JavaScript

{ 
    "adminroles":{ 

     "admin1": "some_uuid" 
    } 
} 

In meinem file.js, verwende ich den folgenden Code:

return firebase.database() 
     .ref('adminrole/') 
     .once('value') 
     .then(function(snapshot) { 
      var adminuser = snapshot.child('admin1').val(); 
     }); 

jedoch der Snapshot ist nicht definiert.

Könnte jemand bitte mir helfen? Ist ein Problem mit meiner Datenbankstruktur?

+0

Bitte korrigieren Sie Ihre Grammatik und Formatierung – JonyD

+1

Danke für Ihren Kommentar @jonyD. Ich repariere die Formatierung und Grammatik. – Api

+0

Versuchen Sie, das '/' aus 'adminrole /' zu entfernen und verweisen Sie nur auf 'adminrole'. Sie verweisen möglicherweise auf einen nicht vorhandenen Knoten mit einem solchen Ausdruck. Die Erholung scheint mir ok zu sein. Ich würde mehr Informationen über die Struktur der Datenbank benötigen, um mehr herauszufinden. – jankoritak

Antwort

0

Ich habe das Problem gefunden, indem ich auch einen Fehler Callback an die Then() des Versprechens übergeben. In der Tat war das Problem in meinen Regeln der Datenbank.

Ich hatte:

"adminrole":{ 
     "admin1":{ 
      ".read": "auth != null && auth.uid == 'some_uid'", 
      ".write": "auth != null && auth.uid == 'some_uid'" 
      } 
     } 

Also das einmal() einen Fehler zurückgegeben, weil ich keinen Zugriff auf „adminrole“ gelesen hatte. Ich ändere die Regel wie folgt und es funktioniert jetzt.

"adminrole":{ 
     ".read": "auth != null", 
     ".write": "auth != null && auth.uid == 'some_uid'" 
     } 

Die Funktion ist wie folgt:

return firebase.database() 
    .ref('adminrole') 
    .once('value') 
    .then(function(snapshot) { 
     var adminuser = snapshot.child('admin1').val(); 
    }, function(error) { 
     var errorMessage = error.message; 
     alert(errorMessage); 
     console.log(error); 
    }); 
Verwandte Themen