ERR_HTTP_HEADERS_SENT: Невозможно установить заголовки после их отправки клиенту Node js Expres Firebase ERROR - PullRequest
0 голосов
/ 31 марта 2020

Я могу просматривать все страницы. Все идет хорошо, пока я не нажму кнопку html (одобрить / отклонить), которая присутствует в моем dashboard.hbs. Когда я нажимаю на него, необходимо выполнить функцию, присутствующую в dashboard.hbs. Функция выполняется без каких-либо сбоев, и данные обновляются в firebase, которая является моей базой данных, но приложение вылетает с ошибкой. Когда я комментирую строку в функции, которая говорит

var ref=firebase.database().ref(dstname).child(name).child("status");
ref.set(key);

, снова все работает нормально.

Это мое приложение. js

app.post('/dashboard', function(req, res) {
  const id=req.body;
  var ref=firebase.database().ref("Users").orderByChild("username").equalTo(id.user);
  ref.once("value",snapshot=>{
      if(snapshot.exists()){
        snapshot.forEach((function(child) { pass=child.key; }));
        firebase.database().ref("Users").child(pass).once("value",snapshot=>{
          if(id.password==snapshot.val().password){      
            dstname=snapshot.val().username;
            var DbData = firebase.database().ref(dstname).orderByChild("status").equalTo(0);
            DbData.on('value', function(snapshot) { np=snapshot.numChildren(); 
              DbData = firebase.database().ref(dstname).orderByChild("status").equalTo(1);
              DbData.on('value', function(snapshot) { na=snapshot.numChildren();
                DbData = firebase.database().ref(dstname).orderByChild("status").equalTo(2);
                DbData.on('value', function(snapshot) { nr=snapshot.numChildren();
                  req.session.loggedin = true;
                  req.session.username=dstname;
                  return res.redirect("/dashboard");
                });
              });
            });          
          }  
          else{
            return res.render("login",{message:"Invalid Username or Password"});
          }          
        });        
      }
      else{
        return res.render("login",{message:"Invalid Username or Password"});
      }
   });  
});


app.get("/dashboard",function(req,res){
dstname=req.session.username;
    if(req.session.loggedin){
        return res.render("dashboard",{np:np,na:na,nr:nr, dstname:dstname});
    }
    else{
        return res.render("login",{message:"Please Login to view contents"});
    }

});
app.get("/approved",function(req,res){
    dstname=req.session.username;
    if(req.session.loggedin){
        return res.render("approved",{dstname:dstname});
    }
    else{
        return res.render("login",{message:"Please Login to view contents"});
    }

});
app.get("/track",function(req,res){
    dstname=req.session.username;
    if(req.session.loggedin){
        return res.render("map-google",{dstname:dstname});
    }
    else{
        return res.render("login",{message:"Please Login to view contents"});
    }
});

app.get("/notifications",function(req,res){
    dstname=req.session.username;
    if(req.session.loggedin){
        return res.render("notifications",{dstname:dstname});
    }
    else{
        return res.render("login",{message:"Please Login to view contents"});
    }
});
app.get("/pending",function(req,res){
    dstname=req.session.username;
    if(req.session.loggedin){
        return res.render("pending",{dstname:dstname});
    }
    else{
        return res.render("login",{message:"Please Login to view contents"});
    }
});

Это мое html скрипт dashboad.hbs

const dstname=document.getElementById("u1").value;
var table = document.querySelector('#table1 tbody');
const DbData = firebase.database().ref(dstname).orderByChild("status").equalTo(0);
DbData.on('value', snap => {
  while(table.hasChildNodes()) {
      table.removeChild(table.firstChild);
  }
  var users = snap.val();
  for(var i in users) {
    var row = table.insertRow(-1);
    for(var j in users[i]) {
      if(j=="lat"||j=="long"||j=="status")
        continue;
      else{cell = row.insertCell(-1);
              cell.innerHTML = users[i][j];
          }
      }
          cell = row.insertCell(-1);
      row.cells[row.cells.length-1].innerHTML=`<input onclick="approve(name);" type="submit" name=${i} value="Approve" class="approve-btn"/>`;
      cell = row.insertCell(-1);
      row.cells[row.cells.length-1].innerHTML=`<input onclick="reject(name);" type="submit" name=${i} value="Reject" class="reject-btn"/>`;

  }
});

}());
function approve(name){
  approveorreject(name,1);
  }
function reject(name){
  approveorreject(name,2);
}
function approveorreject(name,key) {
const dstname=document.getElementById("u1").value;
var ref=firebase.database().ref(dstname).child(name).child("status");
    ref.set(key);


};

Это ошибка:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:526:11)
    at ServerResponse.header (C:\Users\jobyk\Desktop\cytrack2\node_modules\express\lib\response.js:771:10)
    at ServerResponse.location (C:\Users\jobyk\Desktop\cytrack2\node_modules\express\lib\response.js:888:15)
    at ServerResponse.redirect (C:\Users\jobyk\Desktop\cytrack2\node_modules\express\lib\response.js:926:18)
    at C:\Users\jobyk\Desktop\cytrack2\app.js:50:30
    at C:\Users\jobyk\Desktop\cytrack2\node_modules\@firebase\database\dist\index.node.cjs.js:4549:22
    at exceptionGuard (C:\Users\jobyk\Desktop\cytrack2\node_modules\@firebase\database\dist\index.node.cjs.js:698:9)
    at EventList.raise (C:\Users\jobyk\Desktop\cytrack2\node_modules\@firebase\database\dist\index.node.cjs.js:9622:17)
    at EventQueue.raiseQueuedEventsMatchingPredicate_ (C:\Users\jobyk\Desktop\cytrack2\node_modules\@firebase\database\dist\index.node.cjs.js:9576:41)
    at EventQueue.raiseEventsAtPath (C:\Users\jobyk\Desktop\cytrack2\node_modules\@firebase\database\dist\index.node.cjs.js:9545:14) {
  code: 'ERR_HTTP_HEADERS_SENT'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...