2017-09-25 101 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()' –

相關問題