2017-04-13 2 views
0

Ich habe einen voll funktionsfähigen nodejs Code, der bei einigen Benutzeraktionen ein PDF generiert, das PDF an den Benutzer per E-Mail versendet und das PDF in die Dropbox hochlädt. Es funktioniert perfekt auf localhost aber wie ich stelle meinen Code auf heroku, bekomme ich einige Fehler. Ich fand den Fehler anscheinend wegen der pdf-Erzeugung. Ich habe html-pdf zum Generieren von PDF aus meiner ejs Vorlage verwendet. Der Code ist unten:nodejs html-pdf funktioniert nicht auf heroku

if (req.body.text == "Approved"){ 
      ejs.renderFile('./views/template.ejs', {user: user}, function(err, result) { 
      if (result) { 
      var filename = user.number+ ".pdf"; 
      var path = './public/files/'+filename ; 
      var options = { filename: path, format: 'Legal', orientation: 'portrait', directory: './public/files/',type: "pdf" }; 
      html = result; 
      pdf.create(html, options).toFile(function(err, res) { 
      if (err) return console.log(err); 
        console.log(res); 
      }); 
      user.path = path; 
      user.save() 
      var dbx = new dropbox({ accessToken: mytoken }); 
      fs.readFile(path,function (err, contents) { 
       if (err) { 
        console.log('Error: ', err); 
       } 
       dbx.filesUpload({ path: "/"+filename ,contents: contents }) 
       .then(function (response) { 
         console.log("done") 
         console.log(response); 
        }) 
        .catch(function (err) { 
         console.log(err); 
        }); 
       }); 

       var mailOptions = { 
            from: '"EMediCare"', 
            to: user.email, // list of receivers 
            subject: 'Confirmation: Quote received', // Subject line 
            attachments : [{ 
            filename: filename, 
            path : path 
            }] 
           }; 
       transporter.sendMail(mailOptions, (error, info) => { 
       if (error) { 
        return console.log(error); 
       } 
       console.log('Message %s sent: %s', info.messageId, info.response); 

       }); 
      } 
        // render or error 
      else { 
         res.end('An error occurred'); 
         console.log(err); 
      } 

    }); 
} 
     else { 
      user.path = null; 
      user.save(); 
     } 

Meine Probe template.ejs ist:

<html> 
<head> 
<title>my pdf </title> 
</head> 
<body> 
    <%= user.first_name%> 
    <span><%= user.last_name%></span> 
</body> 

Wenn ich auf Heroku mein Protokoll überprüft es sagt, dass es nicht die Datei

+0

_ "ich erhalte einige Fehler" _. Welches sein würde...? – robertklep

+0

@robertklep gut es macht nicht die Vorlage, ich bekomme eine leere pdf – scrpaingnoob

+0

Sie können nicht zuverlässig Dateien auf Heroku speichern. Siehe http://stackoverflow.com/questions/30491949/node-js-createwritestream-doesnt-create-new-file-on-heroku. – skiilaa

Antwort

0

In Heroku öffnen kann eine lokale Dateispeicher des dyno ist nicht persistent (neben den git Repo-Dateien natürlich), wenn Sie also eine lokale Datei schreiben und der Dyno neu startet, ist die Datei verschwunden, und wenn Sie einen anderen Dyno starten, kann die Datei nicht "gesehen" werden.

heroku run bash startet einen neuen "einmaligen" Prüfstand (kann hier darüber gelesen werden: https://devcenter.heroku.com/articles/one-off-dynos), damit die Datei nicht auf diese Weise zugänglich ist.

Wenn Sie möchten, dass Ihre Daten bestehen bleiben, verwenden Sie besser ein Datenbank- oder persistentes Speicher-Addon.

(Zitat aus node.js createWriteStream doesn't create new file on Heroku)

Verwandte Themen