首页 > 解决方案 > 如何在 Node/Koa 中将流作为 JSON 响应的一部分返回?

问题描述

目前,我有一个路由处理程序,它返回一个 PDF 流作为响应正文:

api.get('/create/pdf', async ({ request, response }) => {
  const { pdfStream } = await createPdfStream() // This returns a Transform stream
  response.body = pdfStream 
})

我可以通过执行以下操作在客户端上获取此 PDF:

const response = await fetch('/create/pdf')
const blob = await response.blob()
const pdfUrl = URL.createObjectUrl(blob) // I can now use `pdfUrl` to render the PDF

但是,我现在想从 API 路由返回一些额外的属性,所以我想让它成为 JSON 响应,而不是仅仅返回流。这可能吗?我基本上想将我的路由处理程序更改为这样的:

api.get('/create/pdf', async ({ request, response }) => {
  const { pdfStream, pdfMetadata } = await createPdfStream() // This returns a Transform stream
  response.body = {
    pdfStream,
    pdfMetadata
  }
})

但是如果我这样做了,我不确定我将如何能够再访问客户端上的 PDF,因为我不能再这样做response.blob()了,我只能做response.json(). 有没有人有任何提示?

标签: node.jskoakoa2node-streams

解决方案


推荐阅读