Как запросить данные в Firebase, используя userID в Javascript? - PullRequest
0 голосов
/ 26 ноября 2018

Мне нужно запросить информацию о пользователе из узла пользователя и затем отобразить ее в моей html-таблице, поскольку на данный момент я могу только запросить дочерний элемент состояния узла запроса в моей базе данных Firebase в моей html-таблице.

Как запросить информацию о каждом пользователе в каждом узле, где присутствует его uid?Вот моя структура, на данный момент я могу отображать статус ожидания.Поскольку у пользователя есть только 1 uid, я думаю, что возможно наложение имен каждого пользователя рядом с его статусом ожидания.

Target Data] 1

вот какЯ ожидаю запроса,

var database = firebase.database().ref().child('Request').child('Pending');
database.once('value', function(snapshot){
    snapshot.forEach(function(data){
       var ReqStatus = data.val().request_status;
      content +='<tr>'
      content +='<td>' + ReqStatus+ '</td>'; 
      content +='</tr>';
});
    $('#mytable').append(content);
}
);

1 Ответ

0 голосов
/ 26 ноября 2018

Чтобы также загрузить пользовательские данные для каждого запроса, вам нужно будет использовать дополнительный прослушиватель.Самый простой подход выглядит примерно так:

var root = firebase.database().ref();
var database = root.child('Request').child('Pending');
database.once('value', function(snapshot){
  snapshot.forEach(function(data){
      var reqStatus = data.val().request_status;
      var uid = data.key;
      root.child('User').child(uid).once('value', function(userSnapshot) {
        var username = userSnapshot.val().username;
        content += '<tr>'
        content += '<td>' + username+ '</td><td>' + reqStatus+ '</td>'; 
        content += '</tr>';
      })
  });
  $('#mytable').append(content);
});

Несколько замечаний по этому подходу:

  1. Вы выполняете намного больше вызовов Firebase, но производительность, как правило, будеточень хорошо, поскольку Firebase передает эти запросы .
  2. Если у пользователя есть несколько запросов, вы загружаете узел для этого пользователя несколько раз.Если это реальный вариант использования вашего приложения, вы можете сохранить кэш недавно загруженных пользователей.
  3. Этот код загружает весь пользовательский узел.Если вам нужно только их имя, вы можете прослушать дочерний узел username, чтобы уменьшить использование полосы пропускания: root.child('User').child(uid).child('username').once('value'....
  4. Как прокомментировал Андре: вы можете вместо этого сохранить имя пользователяавтора в каждом узле запроса, чтобы уменьшить количество операций чтения и упростить код.Сделать это в JavaScript довольно просто:

    var root = firebase.database().ref();
    var database = root.child('Request').child('Pending');
    database.once('value', function(snapshot){
      snapshot.forEach(function(data){
          root.child('User').child(data.key).child('username').once('value', function(userSnapshot) {
            data.ref.update({ username: userSnapshot.val() });
          })
      });
    });
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...