【问题标题】:Sending a PDF from client to server isn't working with stream.pipe(res) in Ubuntu server将 PDF 从客户端发送到服务器不适用于 Ubuntu 服务器中的 stream.pipe(res)
【发布时间】:2017-09-24 09:51:36
【问题描述】:

我有一个应用程序可以制作 PDF 并使用节点 js 将其发送给客户端。该应用程序在本地完美运行,但是当我将它托管在 Digital Ocean 的 Ubuntu 服务器中时,生成 PDF 的端点无法正常工作

这是将 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)
    })

当我在本地运行它时,它可以完美运行:

但是当我在 Ubuntu Digital Ocean 液滴中托管时,另一个端点工作但生成的 PDF 一个不工作,它向我显示错误

我认为这是一个超时问题,应用程序没有等待流完成以管道传输它。

【问题讨论】:

    标签: node.js vue.js timeout digital-ocean node-streams


    【解决方案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。

    试试rm -Rf ./node_modules && npm i

    【讨论】:

      猜你喜欢
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      相关资源
      最近更新 更多