2017-09-25 66 views
0

我最近部署了一个用Node.js编写的Heroku应用程序,到目前为止一切正常。Heroku从本地文件系统提供文件

但是,我得到部署的应用程序来显示应用程序生成的PDF文件的问题。

我有一个页面,允许人们从他们在页面上输入的某些信息动态生成PDF文件。

的部分看起来像这样:

screen shot of where I generate the 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提交请求生成一个例子网址:

URL generated from POST request

这究竟是为什么?

回答

1

从浏览器使用该地址,您正在向服务器发出GET请求(而不是POST请求)。您是否在服务器端使用允许下载生成的文件的地址设置GET请求? 要做到这一点,您应该通过传递文件的URL来使用响应的下载功能(Express doc)。

+0

那么答案就如同将POST请求改为GET请求一样简单吗?为什么它试图从本地文件系统中“GET”文件而不是Heroku服务器上的相应位置? –

+0

在Heroku应用上,当你点击“生成PDF”按钮时,你是否重定向到本地主机? “生成PDF”只能创建PDF文件或下载它?如果是这样,尝试改变'res.end();''res.download()' –

相关问题