2017-09-24 10 views
0

J'ai une application qui crée un fichier PDF et l'envoie au client en utilisant le nœud js. L'application fonctionne parfaitement localement mais quand je serai l'hôte dans un serveur Ubuntu dans Digital Ocean, le point final qui génère le PDF ne fonctionne pasL'envoi d'un PDF du client au serveur ne fonctionne pas avec stream.pipe (res) dans le serveur Ubuntu

Ceci est le code qui envoie le PDF au client:

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

      }); 

du côté client ce que je communique avec le point final

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

Quand je lance localement il fonctionne parfaitement: enter image description here

mais quand je serai l'hôte dans un océan numérique Ubuntu gouttelettes l'autre travail point final, mais le fichier PDF généré un ne fonctionne pas et il me montre que l'erreur enter image description here

Je pense qu'il est un problème de délai d'attente de l'application n'attend pas pour le flux pour finir de le pipe en res.

Répondre

1

Une erreur est survenue lors de la génération de votre fichier pdf, mais comme vous ne revenez pas lors de la gestion des erreurs, il exécute toujours l'instruction stream.pipe.

Changer votre code à ceci:

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

Avis J'ai ajouté un console.error(err);, il pourrait vous aider à déboguer plus loin. Mais je pense que la bibliothèque que vous utilisez utilise PhantomJS, peut être une erreur avec elle comme PhantomJS doit être compilé pour l'arche.

Essayez de faire rm -Rf ./node_modules && npm i