Я могу просматривать все страницы. Все идет хорошо, пока я не нажму кнопку 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'
}