База данных Firebase в реальном времени с Node.js и Handlebars - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь создать прямую ленту обновлений на веб-сайте Node.js, которая будет извлекать обновления из базы данных Firebase в реальном времени.Мне удается загружать обновления при открытии страницы, но я изо всех сил стараюсь обновить их в режиме реального времени.Чтобы быть конкретным: я не могу понять, как передать объект ссылки на базу данных через Handlebars.

Так что теперь я извлекаю обновления из базы данных с помощью:

const getUpdates = () => {
  return new Promise((resolve, reject) => {
    try {
        const ref = firebaseApp.database().ref('liveUpdates');
        resolve(ref.once("value"), ref);
    } catch (e) {
        reject(e);
    }
  });
};

И затем отрисовываюстраница:

exports.loadDashboard = (req, res) => {
  getUpdates().then((updates, ref) => {
    const updatesList = updates.val();
    res.render('index', { updatesList, ref });
    return;
  });
};

Тогда я бы хотел сделать что-то подобное в файле .hbs:

<script>
  var updates = {{{json ref}}};
  updates.on("value" () => {
    //Handle update
  });
</script>

Помощник json Handlebars:

json: (content) => {
  return JSON.stringify(content);
}

При таком подходе строка var updates = {{{json ref}}};выдает ошибку:

Uncaught SyntaxError: неожиданный токен;

Так что я делаю не так?Я не очень много работал с Рульом, поэтому извините за мое невежество.

1 Ответ

0 голосов
/ 26 апреля 2018

{{{json ref}}} - это шаблон Handlebar / Mustache, а не действительный код javaScript.Вы помещаете этот фрагмент прямо в «тег сценария», помечая его как код JS.

Если вы хотите оценить значение выражения Handlebar и присвоить его переменной с помощью javaScript, вы можете попробовать использовать метод compile .Примерно так:

var updates = Handlebars.compile('{{{json ref}}}');

После освоения базовых примеров Handlebar вы также можете взглянуть на как предварительно скомпилировать шаблоны .Это настоятельно рекомендуется для производственных сред с высокой нагрузкой.

...