[英]error Cannot set headers after they are sent to the client
我在我的 controller 中為 express.js 中的發布路線執行此操作
exports.post_record = (req, res) => {
//it's not actually needed but i am doing this just for sake of checking
if (!req.file) {
return res.status(422).json({
message: 'The file is required.'
});
}
//checking if file is empty
if (req.file.size == 0) {
return res.status(400).send("file is empty");
}
try {
// result storing object
const results = {
P: 0,
QRS: 0,
meanFrequency: 0,
minFrequency: {
value: 9999999,
time: 0
},
maxFrequency: {
value: 0,
time: 0
}
};
//for mean frequency calculation
const frequencyCollector = {
sumOfFrequency: 0,
cycleCount: 0
};
//entries of valid wave type object to check if the wave type in our csv are valid data-sets
const expectedWave = {
P: true,
QRS: true,
T: true,
INV: true
};
let time = 0;
let lastTimeStamp = 0;
readLine.createInterface({
input: fs.createReadStream(req.file.path)
}).on("line", line => {
const cols = line.split(",");
const waveType = cols[0];
const startTime = cols[1];
const endTime = cols[2];
const tags = cols.slice(3);
//just to make sure csv has valid data list
if (!(waveType in expectedWave && Number(startTime) >= 0 && Number(endTime) > 0)) {
res.status(500).send("File data entry is not in supported format");
return;
}
if ((waveType === "P" || waveType === "QRS") && tags.includes("premature")) {
results[waveType]++;
}
time += (cols[2] - cols[1]);
time += (cols[1] - lastTimeStamp);
lastTimeStamp = cols[2];
if (waveType === "QRS") {
let frequency = Math.floor((60 / time) * 1000);
//check if frequency is maxValue or minValue
if (frequency > results.maxFrequency.value) {
results.maxFrequency.value = frequency;
results.maxFrequency.time = Number(cols[2]);
}
if (frequency < results.minFrequency.value) {
results.minFrequency.value = frequency;
results.minFrequency.time = Number(cols[2]);
}
frequencyCollector.sumOfFrequency += frequency;
frequencyCollector.cycleCount++;
time = 0;
}
}).on("error", (err)=>{
return res.status(500).send(`error is: ${err.message}`);
}).on("close", () => {
let heartRate = Math.floor(frequencyCollector.sumOfFrequency / frequencyCollector.cycleCount);
results.meanFrequency = heartRate;
results.maxFrequency.time += Number(req.body.time);
results.minFrequency.time += Number(req.body.time);
res.status(200).json(results);
return;
});
}
catch (err) {
console.error(err);
res.status(500).send(`there is an error with message: ${err.message}`);
return;
}
}
如果沒有錯誤情況並拋出錯誤,則此代碼可以正常工作
代碼:'ERR_HTTP_HEADERS_SENT'
當我發送任何導致錯誤或提前終止操作的情況時,例如
if (!(waveType in expectedWave && Number(startTime) >= 0 && Number(endTime) > 0)) {
res.status(500).send("File data entry is not in supported format");
return;
}
如果這種情況在這段代碼中得到滿足!!!
我知道這個錯誤
拋出新的 ERR_HTTP_HEADERS_SENT('set'); ^ 錯誤 [ERR_HTTP_HEADERS_SENT]: 發送到客戶端后無法設置標頭
如果存在具有特定狀態的響應並再次嘗試設置響應的狀態,則拋出。 為了避免這種情況,我在每個響應返回語句中都寫了一個返回,但沒有結果。
有什么你可以幫忙的嗎,我確信有些東西我看不到。
還有一件事我正在使用 Axios 發送表單數據
axios({
method: 'post',
url: '/POST/delineation',
data: formData,
config: { headers: {'Content-Type': 'multipart/form-data' }
}
我知道使用 xhr 我們不需要自己設置配置,因為 ajax 會自己設置邊界。 我不知道我是否應該將配置放在 Axios 中。 如果我不把它放在 Axios 中,Axios 會自己放嗎?
提前致謝 !!!
找不到文件時,您似乎沒有返回響應
if (!req.file) {
return res.status(422).json({
message: "The file is required.",
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.