我最近部署了一个用Node.js编写的Heroku应用程序,到目前为止一切正常。
但是,我在部署的应用程序显示由应用程序生成的pdf文件时遇到问题。
我有一个页面,允许人们根据他们在页面上输入的一些信息动态生成PDF文件。
该部分如下所示:
Generate PDF
按钮提交POST
请求,该请求可以从页面上的HTML动态创建视图,并使用HTML-PDF
模块将其转换为PDF文件。
代码如下所示:
router.post('/formulas/:id/pdf', function(req, res){
var db = req.db.collection('users');
var id = new ObjectID(req.params.id);
var pointer = {"formulas.$": 1, "_id": 0};
db.aggregate([
{$match: {"formulas.f_id": id}},
{$unwind: "$formulas"},
{$match: {"formulas.f_id": id}},
{$project : {"formulas": 1, "_id": 0}}
]).toArray(function(e, doc){
if (e) {
throw e;
} else {
var html = null;
ejs.renderFile('./views/pdf.ejs', {
project: doc[0].formulas,
title: 'Formula Info Report',
description: 'PDF Report For Your Formula by Nutraceutical Pro',
ID: 'pdf',
keywords: 'PDF, PDF generator, Formula Info Report',
user: req.user,
loggedIn: req.isAuthenticated()
}, function(err, results){
if (err) {
console.log(err);
}
html = results;
});
var options = { format: 'Letter' };
var path = './public/pdf/formula-' + req.params.id + '.pdf';
pdf.create(html, options).toFile(path, function(err, results) {
if (err) {
return console.log(err);
}
if (results) {
res.end();
}
});
}
});
});
在我的本地机器上,这很好用。但是,当部署到Heroku时,我收到Cannot GET
错误,因为它试图从我的本地服务器获取该文件。
这是在提交POST
请求时生成的示例网址:
为什么会这样?
答案 0 :(得分:1)
使用浏览器中的该地址,您正在向服务器发出GET请求(而不是POST请求)。您是否在服务器端使用允许下载生成文件的地址设置了GET请求? 为此,您应该通过传递文件的URL来使用响应的下载功能(Express doc。