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

how to send content of files within a directory on node.js to client

当我想将文件内容发送给客户端时,我收到此错误 "Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client"。

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);


      });

    });
  });




  });

您收到 "Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client" 错误的原因是因为您在读取第一个文件后立即发回响应,因此当您尝试发回第二个文件时,您会得到在将它们发送到客户端后无法设置 headers 的错误,即响应已经送达。有关更多详细信息,请参阅 this

一个解决这个问题的可能方法是使用readFileSync读取所有文件,将它们存储在object中,并在读取所有文件后成功,将它们作为响应发回。像这样,

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