簡體   English   中英

使用 stream.pipe 跳過 express 中間件

[英]using stream.pipe make express middleware skipped

我為我的 api 服務器使用expressnodejs ,現在我實施 pdf 下載(我使用pdf-creator-node )以將 html 轉換為 pdf。

pdf-creator-node將在轉換 html 時創建一個 stream,當我創建 pipe 時,我所有的中間件( notFoundHandlererrorHandlerresponseLogger )都被跳過了

router.get(
  '/generatePDF', authenticate, schemaValidation({ params: generatePDFschema }),
  (req, res, next) => {
generatePDF(details) {
      const template = readFile('./src/templates/da-template.html');
      const receipt = {
        html: template,
        data: payload,
        type: 'stream'
      };
      const generatedPdf = pdf.create(receipt, advisOptions);
      return generatedPdf;
    }

    const pdfStream = generatePDF(details);
    res.setHeader('Content-type', 'application/pdf');
    pdfStream.pipe(res);
},
notFoundHandler,
errorHandler,
responseLogger
);

有快遞api可以轉pipe到stream嗎?

您顯示的中間件在請求處理程序之后傳遞給router.get() ,因此除非您在請求處理程序中調用next() ,否則它將沒有機會運行。 當您將多個請求處理程序傳遞給router.get()時,它們將按順序運行,第二個只有在第一個調用next()時才有機會運行。 第三個也一樣,依此類推。

此外, pdfStream.pipe(res); 不調用next()

我不確切知道這些中間件函數應該做什么,但是根據它們的名稱進行猜測,也許它們應該在您的請求處理程序之前運行,而不是之后運行,這樣它們就可以針對各種錯誤情況進行處理。

如果您需要進一步的幫助,請展示這三個中間件功能的代碼,以便我們可以更具體地了解它們正在嘗試做什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM