对于文件下载,快速“无法在发送后设置标头”

时间:2013-11-19 14:15:20

标签: node.js

我最近在Express应用程序中发现了一个错误,它在某些情况下会生成错误并导致某个nodejs崩溃。

我为某个应用程序端点配置了以下剪辑(例如GET / pdf)

app.get('/pdf/',function(req, res) {
  myPdfBuilder.buildPdf(pdfOptions, function(doc,err) {
    if (err) {
      res.status(500); res.end("Error");
    }
    else {
      res.contentType("application/pdf");
      res.attachment("my.pdf");
      doc.output(function(out) {
        res.end(out, 'binary');
      }
    }
  }
});

buildPdf函数使用pdfkit(0.1.9)呈现PDF对象,然后将其读取并将输出发送到res(也称为“响应”)。

如果我访问端点,则PDF已成功下载。我看到设置了响应标头:

Connection: keep-alive
content-disposition: attachment; filename=my.pdf
content-type: application/pdf

但如果我尝试第二次下载,该应用程序有一个例外:

http.js:692
  throw new Error('Can\'t set headers after they are sent.');

堆栈跟踪包含对res.contentType("application/pdf")

行的引用

知道为什么应用程序在下载对象的第二个请求上崩溃了吗? nodejs进程锁定并且必须被杀死并重新启动(SIGKILL,SIGTERM什么都不做)。

express是版本2.5.11,带有连接1.9.2

0 个答案:

没有答案