NodeJS 将pdfkit PDF导入Fastify

xuo3flqw  于 11个月前  发布在  Node.js
关注(0)|答案(1)|浏览(99)

从我读到的来看,他的应该能用。但是它只是下载一个空文档。所以我一定是对管道的处理不正确。
如果我把它传输到fs.createWriteStream,它会工作得很好...

import PDFDocument from 'pdfkit'

const downloadPdfRoute = async (app) => {
    app.get('/download/:filename', async (req, reply) => {

        const doc = new PDFDocument()

        reply.type('application/pdf')
        reply.header(
            'content-disposition',
            `attachment; filename="${req.params.filename}"`
        )

        doc.pipe(reply.raw)

        doc.text('Hello, this is your PDF content.')

        doc.end()
    })
}

export default downloadPdfRoute

字符串
我做错了什么?

zzwlnbp8

zzwlnbp81#

更新:经过OP的进一步调查,结果发现return关键字是工作所必需的,因此我更新了我的答案以包括它。
Fastify还支持发送这样的流:

return reply.send(doc);

字符串
所以你应该尝试这样做,而不是doc.pipe(reply.raw);,因为.raw的使用,不推荐这样做:
[...]使用Reply.raw函数的风险由您自己承担,因为您跳过了处理HTTP响应的所有Fastify逻辑。
顺便说一句,你的原始代码对我来说很好,所以也许你应该尝试在一个新的环境中提取你的代码,看看你是否可以重现这一点。

相关问题