2017-04-13 72 views
0

我有一個功能完備的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://stackoverflow.com/questions/30491949/node-js-createwritestream-doesnt-create-new-file-on-heroku。 – skiilaa

回答

0

在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