I can browse through all pages.Everything goes fine till I click an html button(approve/reject), which is present in my dashboard.hbs. When I click it a function present in dashboard.hbs needs to be executed. The function executes without any failure and the data gets updated in firebase, which is my db but the app crashes with the error. When i comment the line in function which says
var ref=firebase.database().ref(dstname).child(name).child("status");
ref.set(key);
again everythin works fine.
This is my app.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"});
}
});
This is my html script of 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);
};
This is the error:
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'
}