Базовая динамическая страница с Firebase - PullRequest
0 голосов
/ 07 апреля 2019

Я новичок в этом, поэтому , пожалуйста, , проявите некоторую милость. Я очень стараюсь.

У меня есть развернутый Firebase веб-сайт. Тип пользователя: domain.com/1

откроет файл index.html в папке с именем 1. Прекрасно работает.

Теперь я хотел бы поделиться с другом своим контентом из БД для той же страницы.

Этот контент имеет ID и его 456`. В базе данных Firebase у меня есть строка, в которой этот идентификатор соответствует содержимому.

Я хочу поделиться со своим другом domain.com/1 + the ID 456 по URL , поэтому, когда он загрузит страницу, он получит контент, соответствующий 456. (взят из БД)

  1. Как должен выглядеть этот URL-путь для включения папки 1 и идентификатора 456? есть только один путь?
  2. Как будет выглядеть архитектура? пользователь загружает html этой страницы (без содержимого) с этим параметром 456, JS на стороне клиента, вернуться в Firebase, чтобы получить содержимое и загрузить на страницу? ( Я сделал это, что работает (с использованием функций), но очень медленно. )
  3. Может ли пользователь запросить что-то вроде domain.com/1?456 и перенаправить на функцию на Firebase, которая уже извлекает данные (456) и возвращает страница * с данными *? (один звонок на сервер) если да, КАК?

Как это сделать? 2 или 3?

1 Ответ

2 голосов
/ 07 апреля 2019

Существуют различные способы реализации вашего требования ... Одна из "классических" архитектур - это иметь фиксированную страницу (index.html в вашем случае), которая запрашивает базу данных Firebase Realtime при ее открытии.

Один из способов передать значение узла базы данных, который вы хотите запросить, - использовать строку URL-запроса следующим образом: domain.com/1?id=456 (См. Как получить значения строки запроса в JavaScript? )

Следующий HTML-код поможет:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Title</title>
    <script src="https://www.gstatic.com/firebasejs/5.9.3/firebase.js"></script>

    <script>
      // Initialize Firebase
      var config = {
        apiKey: 'xxxxxxx',
        authDomain: 'xxxxxxx',
        databaseURL: 'xxxxxxx',
        projectId: 'xxxxxxx'
      };
      firebase.initializeApp(config);

      var rootRef = firebase
        .database()
        .ref()
        .child('data');

      var urlParams = new URLSearchParams(window.location.search);
      var dbNodeID = urlParams.get('id');

      rootRef
        .child(dbNodeID)
        .once('value')
        .then(function(snapshot) {
          var dataItem1 = snapshot.val().dataItem1;
          document.getElementById('content').innerHTML = dataItem1;
        });
    </script>
  </head>

  <body>
    <div id="content"></div>
  </body>
</html>

с моделью базы данных следующим образом:

DBRoot
   - data
     - 456
       - dataItem1: "value-of-456"
     - 789
       - dataItem1: "value-of-789"

Это можно улучшить многими способами, ноэто слишком широк для одного ТАК вопрос и ответ!Просто пример: поскольку запрос к базе данных является асинхронным, для отображения значений на веб-странице может потребоваться время.По умолчанию вы можете отобразить счетчик и скрыть его, когда получите результат запроса (т. Е. В методе then()).Другим примером улучшения может быть использование библиотек или структур, таких как JQuery или, что лучше, Vue.js, Angular или React.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...