組合請求處理器

問題

在 Qwik 應用程式中,我們經常需要多個請求處理常式來執行 中介軟體函數。事實上,根據 單一職責 原則,中介軟體函數的開發只為執行一項任務(例如建立資料庫連線)。在這些前提下,在保持呼叫順序的同時組合多個請求處理常式可能會很複雜。例如,您有一個請求處理常式用於連線到資料庫,另一個請求處理常式用於載入目前的使用者記錄,後者取決於前者,因此必須按順序呼叫它們。

解決方案

如果您想將多個請求處理常式鏈接在一起,可以使用此工具函數。

import type { RequestHandler } from '@builder.io/qwik-city';
 
/**
 * Combines multiple request handlers into a single request handler.
 *
 * The handlers will be called in order:
 *
 * 1. Handler1 before next()
 * 2. Handler2 before next()
 * 3. Handler3 before next()
 * 4. Next()
 * 5. Handler3 after next()
 * 6. Handler2 after next()
 * 7. Handler1 after next()
 *
 * @public
 */
 
export const combineRequestHandlers = (...handlers: RequestHandler[]): RequestHandler =>
  async (originalContext) => {
    let lastNext = originalContext.next;
    for (let i = handlers.length - 1; i >= 0; i--) {
      const currentHandler = handlers[i];
      const nextInChain = lastNext;
      lastNext = async () => {
        await currentHandler({ ...originalContext, next: nextInChain });
      };
    }
 
    await lastNext();
  };

貢獻者

感謝所有為改進此文件做出貢獻的貢獻者!

  • gioboa
  • erikras