如何将node.js目录中文件的内容发送到客户端

时间:2019-12-28 07:29:19

标签: node.js fs

当我想将文件内容发送到客户端时,出现此错误“错误[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);


      });

    });
  });




  });

1 个答案:

答案 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
    });
});