如何在更新firebase时自动重新呈现ejs

时间:2018-05-30 17:55:07

标签: javascript node.js firebase firebase-realtime-database ejs

我正在使用Nodejs构建一个webapp并通过EJS模板生成HTML页面。我对初始页面加载/刷新很好,它按预期工作,它从firebase获取数据并填充。稍后更新firebase集合时,重新呈现不会发生无法在网页中看到新添加的数据,但在VSCode控制台中,我可以看到侦听器从firebase发布整个集合。

app.get('/feedback', (request, response) => {
  var appRef = firebase.database().ref().child('ApplicationList');
  var appList = {}, appNames = {};
  appRef.on('value', function(snap) {
    appList = snap.val();
    console.log('appList', appList);
    let keys = Object.keys(appList);
    for(let i=0;i<keys.length;i++){
       appNames[keys[i]] = appList[keys[i]].longName;
    }
    console.log('Keys = ',keys);
    console.log('appNames = ',appNames);
    response.render('feedback.ejs', {
        pageTitle:'Feedback - Home',
        pageID: 'feedbackhome',
        pageName: 'Home',
        appNames
    });        
  });            
});

2 个答案:

答案 0 :(得分:0)

您必须在NodeJS服务器中使用websockets(例如Socket.io)来订阅这些更改,或者将Firebase监听器移动到客户端逻辑(如果需要,可以在更改中调用NodeJS应用程序中的某些端点)在服务器上执行某些操作。)

答案 1 :(得分:0)

感谢。我想在EJS中这样做,因为我不想使用createElement()创建带有复杂javascripting代码的webapp。因此决定通过车把进行客户端模板化。

var str = 'foo';
typeof str;
// result: "string"

str instanceof String;
// result: false

var Str = new String('bar');
typeof Str;
// result: "object"

Str instanceof String;
// result: true