当我想将文件内容发送到客户端时,出现此错误“错误[ERR_HTTP_HEADERS_SENT]:在发送到客户端后无法设置标题”。
const testFolder = './uploads/';
* app.get('/filedata',function(req,res){
fs.readdir(testFolder, (err, files) => {
files.forEach(file => {
fs.readFile( testFolder+file,'utf8',(err,data)=>{
if (err) {
console.log(err);
}
console.log(data);
res.json(data);
});
});
});
});
答案 0 :(得分:0)
出现"Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client"
错误的原因是因为您在读取第一个文件后就立即发送回响应,因此当您尝试发送回第二个文件时,就会收到错误您无法在将标头发送到客户端后设置标头,即已经提供响应。有关更多详细信息,请参见this。
一种可能的解决方案是使用readFileSync
读取所有文件,将它们存储在一个对象中,然后在成功读取所有文件后,将它们作为响应发送回去。像这样
const testFolder = './uploads/';
app.get('/filedata',function(req,res){
fs.readdir(testFolder, (err, files) => {
let allData = {}
files.forEach(file => {
let data = "";
try{
// Use readFileSync instead of readFile to avoid handling promises and read synchronously
data = fs.readFileSync(testFolder+file).toString() // Read data and convert to string
}catch(err){
console.log(err); // Any error
}
allData[file] = data; // Add to all data object with key as filename and value as data string
});
res.json(allData); // Send all data
});
});