首页 > 解决方案 > 如何发送 API 的 Buffer 响应,作为另一个 API 的响应:NODE JS

问题描述

我是 node.js 和后端开发的新手。返回缓冲区响应时遇到问题。任何人都可以帮助我解决以下情况。

我有后端 API 函数,我从云存储中获取多个图像,返回多个缓冲区文件作为响应。

现在,我再次将缓冲区响应传递给第三方 API 函数......

该第三方 API 函数将处理所有缓冲区文件并生成单个图像缓冲区。

这个最终的单个图像缓冲区应该是我对前端的 API 响应。

但是有些我无法按原样发送该缓冲区,它正在改变。

当我尝试做 response.blob(); 它的生成错误

Uncaught (in promise) TypeError: Failed to execute 'blob' on 'Response': body stream already read 任何人都知道如何正确发送缓冲区响应。

//下面是一些后端代码

downloadSingle = aysnc(req, res){
try{
    //I am fetching files from cloud storage  
     let filelist = [] //I will have a multiple file name in file list;
     let OutputBuffers = [];

     for (let i =0; i<filelist.length; i++){
        
        const sFiles = await // code for fetching files from cloud storage.. its working fine
        const sFileBuffer = await streamToBuffer(sFiles.Body)
        OutputBuffers.push({'bufferName': 'fileList[i]' , 'buffer': sFileBuffer})
     }
     if(OutputBuffers.length>0){
       const formData = new FormData();
       OutputBuffers.forEach(f=>{
          formData.append('files', Buffer.form(f.buffer), {fileName: f.bufferName}))
       }
       try{
          //here I am hitting another API to get a single file from Multiple buffer files 
          // this API returns buffer response in body and header info
          //I need to pass this response buffer and header as it is to front end as response

          const result = await fetch(`ThirdParty_API_URL`, {method: "POST", body: formData});
          return res.send(result); //I think here I am making mistake
       }
       catch(e){
        return res.status(500).json({'error': e})
       }
     }
  }
   catch(e){
      return res.status(500).json({'error': e})
   }
}

//前端代码

const handleDownloadEvent = async(){
   const response = await fetch(`API_URL_for_downloadSingle`, {method: "GET"});
   if(response.ok){
      const fileName = response.headers.get("Content-Disposition");
      const blob = await response.blob(); // this is throwing error 
//Uncaught (in promise) TypeError: Failed to execute 'blob' on 'Response': body stream already read
      const url = URL.createObjectURL(blob)
   }
}

标签: javascriptnode.js

解决方案


推荐阅读