带有Node.js和Handlebars的Firebase实时数据库

时间:2018-04-25 23:05:45

标签: node.js firebase firebase-realtime-database handlebars.js

我尝试在Node.js网站上制作实时更新Feed,以便从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:意外的令牌;

那么我做错了什么?我之前没有和Handlebars合作过,所以请原谅我的无知。

1 个答案:

答案 0 :(得分:1)

{{{json ref}}} 是Handlebar / Mustache模板,而不是有效的javaScript代码。您将该片段直接放在&#34;脚本标记&#34;中,将其标记为JS代码。

如果要评估Handlebar表达式的值并使用javaScript将其分配给变量,可以尝试使用compile方法。类似的东西:

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

掌握基本的Handlebar示例后,您可能还想看看how to pre-compile templates。强烈建议在高负载生产环境中使用。