You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用pdfkit发送带图片PDF时报ERR_HTTP_HEADERS_SENT错误

问题原因
  • 错误Error [ERR_HTTP_HEADERS_SENT]本质是服务端在已经向客户端发送过响应头之后,再次尝试修改、发送响应头导致的冲突。
  • 不带图片时PDF生成逻辑是同步执行的,你自定义的响应发送逻辑会先于Strapi默认的自动响应机制执行,因此可以正常运行。
  • 当PDF包含图片资源时,PDFKit会异步加载、处理图片资源,PDF生成过程变为异步,Strapi的默认自动响应机制会先于你的PDF处理完成逻辑发送默认响应,等你PDF处理完成尝试写响应头时就会触发该错误。
解决方案

首先需要在路由处理函数最前端关闭Strapi的自动响应配置,告知Strapi你会手动处理响应的发送逻辑:ctx.respond = false。

推荐使用流管道的方式直接发送PDF,不需要手动收集buffer,效率更高也更稳妥,修正后代码如下:

// 路由处理函数内第一行添加,关闭Strapi自动响应
ctx.respond = false;

var doc = new PDFDocument({
              bufferPages: true,
            }),
    svg = mySvg;

SVGtoPDF(doc, svg, 0, 0);

// 提前设置响应头
ctx.res.writeHead(200, {
    "Content-Type": "application/pdf",
    "Content-disposition": "attachment;filename=file.pdf",
});

// 直接将PDF流管道传输到响应对象
doc.pipe(ctx.res);

doc.end();

如果你需要先拿到完整PDF数据再发送(比如需要做数据校验、额外加工等操作),只需要在原有代码最开头加ctx.respond = false即可,原有收集buffer的逻辑不需要修改。

内容的提问来源于stack exchange,提问作者Ajil Paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:24:03