2017-09-24 66 views
0

我有一個應用程序生成PDF並使用節點js將其發送到客戶端。該應用程序完美的作品在當地,但是當我在數字海洋中,生成PDF端點Ubuntu的服務器主機它不工作從客戶端發送PDF到服務器無法與Ubuntu服務器中的stream.pipe(res)一起使用

這是發送PDF到客戶端的代碼:

pdf.create(html, options).toStream((err, stream)=> { 
      if (err) { 
       res.json({ 
       message: 'Sorry, we were unable to generate pdf', 
       }); 
      } 
      stream.pipe(res) 

      }); 

在客戶端這一點,我如何與端點

genratePdf({ commit }, data) { 
    axios.post('http://localhost:1337/getpdf', data,{ responseType:'arraybuffer' }).then((response) => { 
     let blob = new Blob([response.data],{type:'application/pdf'}) 
     var link=document.createElement('a'); 
     link.href=URL.createObjectURL(blob); 
     link.download="Report_"+new Date()+".pdf"; 
     link.click(); 


    }, (err) => { 
     console.log(err) 
    }) 

通信。當我本地運行它完美的作品: enter image description here

但是當我在Ubuntu的數字海洋主辦液滴中的另一個端點工作,但生成的PDF一個不能正常工作,它讓我發現錯誤 enter image description here

我認爲這是一個超時問題的應用程序不等待流完成在水庫管道。

回答

1

實際上在生成pdf時會出現錯誤,但是由於處理錯誤時您沒有返回,所以仍會執行stream.pipe語句。

你的代碼改成這樣:

pdf.create(html, options).toStream((err, stream)=> { 
    if (err) { 
     console.error(err); 
     return res.json({ 
      message: 'Sorry, we were unable to generate pdf', 
     }); 
    } 
    return stream.pipe(res) 
}); 

通知我加了一個console.error(err);,它可以幫助你進一步調試。但是我認爲你使用的庫使用PhantomJS,可能會因爲PhantomJS必須編譯爲arch而出錯。

試試做rm -Rf ./node_modules && npm i

相關問題