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它说,它无法打开该文件
答
在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)
_ “我得到了一些错误” _。这将是...? – robertklep
@robertklep好吧,它不呈现模板,我得到一个空白pdf – scrpaingnoob
你不能可靠地存储在Heroku上的文件。请参阅http://*.com/questions/30491949/node-js-createwritestream-doesnt-create-new-file-on-heroku。 – skiilaa