Node.js Heroku从本地文件系统提供文件服务

Node.js Heroku从本地文件系统提供文件服务,node.js,express,heroku,Node.js,Express,Heroku,我最近部署了一个用Node.js编写的Heroku应用程序,到目前为止,一切正常 但是,我在让部署的应用程序显示应用程序生成的pdf文件时遇到问题 我有一个页面,允许人们根据在页面上输入的某些信息动态生成PDF文件 该部分如下所示: Generate PDF按钮提交一个POST请求,该请求从页面上的HTML动态创建一个视图,并使用HTML-PDF模块将其转换为PDF文件 代码如下所示: router.post('/formulas/:id/pdf', function(req, res){ v

我最近部署了一个用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时,我得到了一个
无法获取
错误,因为它试图从本地服务器获取文件

这是提交
POST
请求时生成的URL示例:


为什么会发生这种情况?

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

那么答案是否简单到将
POST
请求更改为
GET
请求?为什么它试图从我的本地文件系统而不是Heroku服务器上的相应位置获取文件?在Heroku应用程序上,当您单击“生成PDF”按钮时,您是否重定向到本地主机?“生成PDF”必须只创建PDF文件或下载它?如果是,请尝试更改
res.end()使用
res.download()