我是一个业余开发人员,正在为学校的一个顶峰项目开发一个案例管理系统。我在后台使用node.js/express。每次我尝试执行以下函数时,都会收到错误消息"can't set headers after sent to client“,该函数保存了一个非常长的表单中的所有案例数据。
在同一个函数中有多个条件语句,因为保存某些数据的要求取决于用户的输入。
我已经在这里的论坛上阅读了关于这个问题的所有内容,大多数人建议在条件语句中发送的响应中添加"return“语句。但是我已经这样做了,我仍然得到相同的错误。我甚至尝试在条件语句中添加"res.end“,以确保整个函数中的代码可以无缝运行。
我知道有一些我遗漏或不太理解的关键概念,所以我希望有人能给我一些启发。请帮帮忙。
谢谢。
saveCaseData: (req, res) =>{
let caseID = req.body.caseID;
let clientID = req.body.clientID;
let firstName = req.body.firstName;
let lastName = req.body.lastName;
//clientcase table
let date_intake = req.body.date_intake;
let referred_by = req.body.referred_by;
let contactInitiation = req.body.contactInitiation;
let client_electronic_signature = req.body.client_electronic_signature;
let contact_electronic_signature = req.body.contact_electronic_signature;
let dcm_electronic_signature = req.body.dcm_electronic_signature;
//client table
let gender = req.body.gender;
let race = req.body.race;
let ethnicity = req.body.ethnicity;
let marital_status = req.body.marital_status;
let best_contact_time = req.body.best_contact_time;
let alternate_phone = req.body.alternate_phone;
let preferred_language = req.body.preferred_language;
let literateEnglish = req.body.literateEnglish;
let literate_preferredLanguage = req.body.literate_preferredLanguage;
let doesNotSpeakEnglish = req.body.does_not;
let primary_phone = req.body.primary_phone;
let email = req.body.email;
//emergency_contact table
let emergencyContactFName = req.body.emergencyContactFName;
let emergencyContactLName = req.body.emergencyContactLName;
let relationship_to_applicant = req.body.relationship_to_applicant;
let proxy = req.body.proxy;
//Risks
let risk1 = req.body.r1;
let risk2 = req.body.r2;
let risk3 = req.body.r3;
let risk4 = req.body.r4;
let risk5 = req.body.r5;
let risk8 = req.body.r8;
let risk9 = req.body.r9;
let risk10 = req.body.r10;
let risk11 = req.body.r11;
let risk12 = req.body.r12;
let risk13 = req.body.r13;
let risk14 = req.body.r14;
let risk15 = req.body.r15;
let risk16 = req.body.r16;
let risk17 = req.body.r17;
let risk18 = req.body.r18;
let risk19 = req.body.r19;
let risk20 = req.body.r20;
let risk21 = req.body.r21;
let risk22 = req.body.r22;
let risk23 = req.body.r23;
let risk24 = req.body.r24;
let risk25 = req.body.r25;
let risk26 = req.body.r26;
let risk27 = req.body.r27;
//clientcase table
let query1 = "UPDATE `clientcase` SET `date_intake`='"+date_intake+"', `referred_by`='" + referred_by + "', `contact_initiation`='"+contactInitiation+"', `client_electronic_signature`='" + client_electronic_signature + "', `contact_electronic_signature`='" + contact_electronic_signature + "', `dcm_electronic_signarture`='" + dcm_electronic_signature + "' WHERE `case_id`='"+caseID+"';";
db.query(query1, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Case Query Success - clientcase data saved.");
res.end();
});
//client table
let clientQuery1 = "UPDATE `client` SET `gender`='"+gender+"', `race`='"+race+"', `ethnicity`='"+ethnicity+"',`marital_status`='"+marital_status+"', `best_contact_time`='"+best_contact_time+"', `alternate_phone`='"+alternate_phone+"', `preferred_lanugage`='"+preferred_language+"', `reads_writes_English`='"+literateEnglish+"', `reads_writes_preferred_language`='"+literate_preferredLanguage+"' WHERE `case_id`='"+caseID+"';";
db.query(clientQuery1, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Client Query 1/3 Success - client data saved.");
res.end();
});
if(doesNotSpeakEnglish){
let clientQuery2 = "UPDATE `client` SET `speaks_English`='no' WHERE `case_id`='"+caseID+"';";
db.query(clientQuery2, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Client Query 2/3 - No, client doesn't speak English saved.");
res.end();
});
} else {
let clientQuery3 = "UPDATE `client` SET `speaks_English`='yes' WHERE `case_id`='"+caseID+"';";
db.query(clientQuery3, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Client Query 3/3 - Yes, client speaks English saved.");
res.end();
});
}
//emergency_contact table
let contactQuery1 = "UPDATE `emergency_contact` SET `first_name`='"+emergencyContactFName+"', `last_name`='"+emergencyContactLName+"', `relationship_to_applicant`='"+relationship_to_applicant+"', `proxy`='"+proxy+"' WHERE `case_id`='"+caseID+"';";
db.query(contactQuery1, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Emergency Contact Query Sucess - Case data saved");
res.end();
});
//Assigning Priority Level and Saving to the DB
if((risk15 && risk16) && (risk1 || risk2 || risk3 || risk4 || risk5 || risk8 || risk9 || risk10|| risk11 || risk12 || risk13 || risk14 || risk17 || risk18)){
let priorityQuery = "UPDATE `clientcase` SET `priority_level` = 'P4' WHERE `clientcase`.`case_id` = '" + caseID +"' ";
db.query(priorityQuery, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Priority-4 Level Updated");
res.end();
});
}
else if(risk1 || risk2 || risk3 || risk4 || risk5 || risk8 || risk9 || risk10|| risk11 || risk12 || risk13 || risk14 || risk15 || risk16 || risk17 || risk18){
let priorityQuery = "UPDATE `clientcase` SET `priority_level` = 'P3' WHERE `clientcase`.`case_id` = '" + caseID +"' ";
db.query(priorityQuery, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Priority-3 Level Updated");
res.end();
});
}
else if(risk23 || risk19 || risk20 || risk21 || risk22 || risk24 || risk25 || risk26 || risk27){
let priorityQuery = "UPDATE `clientcase` SET `priority_level` = 'P2' WHERE `clientcase`.`case_id` = '" + caseID +"' ";
db.query(priorityQuery, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Priority-2 Level Updated");
res.end();
});
}
else{
let priorityQuery = "UPDATE `clientcase` SET `priority_level` = 'P1' WHERE `clientcase`.`case_id` = '" + caseID +"' ";
db.query(priorityQuery, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Priority-1 Level Updated");
res.end();
});
}
//Save Risks to Case Record in the Database (consider switch)
if (risk1) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '1')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 1 added to case record");
res.end();
});
}
if (risk2) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '2')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 2 added to case record");
res.end();
});
}
if (risk3) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '3')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 3 added to case record");
res.end();
});
}
if (risk4) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '4')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 4 added to case record");
res.end();
});
}
if (risk5) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '5')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 5 added to case record");
res.end();
});
}
if (risk8) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '8')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 8 added to case record");
res.end();
});
}
if (risk9) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '9')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 9 added to case record");
res.end();
});
}
if (risk10) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '10')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 10 added to case record");
res.end();
});
}
if (risk11){
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '11')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 11 added to case record");
res.end();
});
}
if (risk12) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '12')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 12 added to case record");
res.end();
});
}
if (risk13) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '13')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 13 added to case record");
res.end();
});
}
if (risk14) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '14')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 14 added to case record");
res.end();
});
}
if (risk15) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '15')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 15 added to case record");
res.end();
});
}
if (risk16) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '16')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 16 added to case record");
res.end();
});
}
if (risk17) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '17')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 17 added to case record");
res.end();
});
}
if (risk18) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '18')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 18 added to case record");
res.end();
});
}
if (risk19) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '19')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 19 added to case record");
res.end();
});
}
if (risk20) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '20')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 20 added to case record");
res.end();
});
}
if (risk21) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '21')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 21 added to case record");
res.end();
});
}
if (risk22) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '22')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 22 added to case record");
res.end();
});
}
if (risk23) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '23')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 23 added to case record");
res.end();
});
}
if (risk24) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '24')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 24 added to case record");
res.end();
});
}
if (risk25) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '25')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 25 added to case record");
res.end();
});
}
if (risk26) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '26')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 26 added to case record");
res.end();
});
}
if (risk27) {
let query = "INSERT INTO `case_risk` (case_id, risk_id) VALUES ('" + caseID + "', '27')";
db.query(query, (err, result, fields) => {
if (err) {
return res.status(500).send(err);
}
console.log("Risk 27 added to case record");
res.end();
});
}
res.redirect("/dcm-home/recommendedPrograms/" + caseID + " ");
},发布于 2020-05-12 04:53:47
在您的代码示例中,有多种方法可以命中res.end()。当它运行时,它会多次命中该方法,从而触发此错误。每个请求只能发送/结束一次。
例如,在前两个查询之后执行res.end()。当您第一次调用res.end()时,它会结束响应,所以当您在下一个查询中第二次调用它时,您会看到这个错误。
另外,我不确定您使用的是什么db,但db.query可能是异步运行的,因此在您发送响应时还没有完成。所以,你的响应可能已经发送了,但是db.query抛出了一个错误,并且发送了一个错误响应,当然也抛出了一个错误,因为你的响应已经发送了。在这种情况下,您可能希望在发送响应之前使用一些等待来确保您的查询已完成运行。
在代码的第一个查询中使用await语法将如下所示:
try {
let query1 = "UPDATE `clientcase` SET `date_intake`='"+date_intake+"', `referred_by`='" + referred_by + "', `contact_initiation`='"+contactInitiation+"', `client_electronic_signature`='" + client_electronic_signature + "', `contact_electronic_signature`='" + contact_electronic_signature + "', `dcm_electronic_signarture`='" + dcm_electronic_signature + "' WHERE `case_id`='"+caseID+"';";
let result = await db.query(query1);
console.log("Case Query Success - clientcase data saved.");
} catch ( err ) {
return res.status(500).send(err);
} 因此将不再有回调,您只需等待查询完成,并将该代码放入try-catch块中,这样如果发生错误,您可以像以前一样处理它。请注意,这可能会使您的代码变慢,因为您需要等待每个结果,然后才能继续下一个查询,但这可能仍然是目前的最佳选择。
https://stackoverflow.com/questions/61739064
复制相似问题