nodejs html-pdf不能在heroku上工作

问题描述:

我有一个功能完备的nodejs代码,在某些用户操作中生成pdf,将pdf发送给用户并将pdf上传到Dropbox。它在本地主机上完美工作,但因为我 部署我的代码heroku,我得到一些错误。我发现这个错误显然是因为pdf的一代。我使用html-pdf来生成我的ejs模板的pdf。代码如下:nodejs html-pdf不能在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(); 
     } 

我的样品template.ejs是:

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

当我检查我的日志在Heroku它说,它无法打开该文件

+0

_ “我得到了一些错误” _。这将是...? – robertklep

+0

@robertklep好吧,它不呈现模板,我得到一个空白pdf – scrpaingnoob

+0

你不能可靠地存储在Heroku上的文件。请参阅http://*.com/questions/30491949/node-js-createwritestream-doesnt-create-new-file-on-heroku。 – skiilaa

在Heroku的一个赛道的本地文件存储为不是持久的(除了git repo文件显然),所以如果你写一个本地文件并且dyno重新启动,文件将会消失,并且如果你启动另一个dyno,它将无法“看见”文件。

heroku run bash开始一个新的“一次性”动态探测器(可以在这里阅读:https://devcenter.heroku.com/articles/one-off-dynos),所以文件将不会以这种方式访问​​。

如果您希望数据持久存在,最好使用一些数据库或持久性存储插件。

(引自node.js createWriteStream doesn't create new file on Heroku