Как получить ejs автоматически перерисовать при обновлении firebase - PullRequest
0 голосов
/ 30 мая 2018

Я создаю веб-приложение с использованием Nodejs и генерирую HTML-страницу с помощью шаблона EJS.Я в порядке с начальной загрузкой / обновлением страницы, она работает как положено, получает данные из базы данных и заполняет.Позже, когда коллекция 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 голосов
/ 31 мая 2018

Спасибо.Я хотел сделать это в EJS, потому что я не хочу создавать веб-приложение со сложными кодами JavaScript с помощью createElement ().Поэтому решил пойти с клиентской стороной шаблонов через руль.

function getAppNames(){
var appRef = firebase.database().ref().child('ApplicationList');
var allApps = {}, appNames =[];
let temp = {};
    appRef.on('value', function(snap) {
        allApps = {};
        appNames = [];
        allApps = snap.val();
        console.log('allApps', allApps);
        let keys = Object.keys(allApps);
        console.log('Keys = ',keys);
        for(let i=0;i<keys.length;i++){
            temp = {};
            temp['shortName'] = allApps[keys[i]].shortName;
            temp['longName'] = allApps[keys[i]].longName;            
            appNames[i] = temp;
        }        
        appNames['appNames'] = appNames;
        console.log('appNames = ',JSON.stringify(appNames));        

        var source   = document.getElementById("sidebar-template").innerHTML;
        var template = Handlebars.compile(source);    
        $('.content-placeholder').html(template(appNames));
    });

}
0 голосов
/ 30 мая 2018

Вы должны либо использовать веб-сокеты (например, Socket.io ) на своем сервере NodeJS, чтобы подписаться на эти изменения, либо переместить прослушиватель Firebase на свою логику на стороне клиента (и при изменении вызвать какую-либо конечную точку в вашем NodeJS).приложение, если вам нужно что-то выполнить на сервере).

...