blog image

2025-11-17

Ts.ED 設定 middleware

之前的文章介紹過 Ts.ED,它是一個建構在 express.js 或是 koa.js 之上,並添加許多便利功能的 TypeScript 框架。最近在設定自訂 middleware 時,我發現了一個不錯的作法,特此記錄下來。

根據官方文件,middleware 分為 Global middleware 和 Endpoint middleware 兩種。而 Gobal middleware 需在 Server上的 @Configuration 中透過 middlewares 屬性設定。然而,我按照文件範例將自訂 middleware 加入 middlewares 後,發現 middleware 並未如預期般觸發。

另一種是 Endpoint middleware,它使用 @UseBefore 裝飾器(decorator)設定在 Controller 上。我認為這種方式更符合我當前的專案需求。

這是因為我的專案採用了類似 sub-controller 的架構:先建立一個基礎 ApiController(路由設為 /api),而其他 Controller 都設定)在它之下。

因此,解決方案是直接在 ApiController 上使用 @UseBefore,並傳入自訂的 middleware。這樣一來,所有使用 /api 路徑的子路由都能自動套用此 middleware。

@UseBefore(ApiKeyMiddleware)
@Controller({
  path: '/api',
  children: [
    ImageFileController,
    ForecastController,
    CountyController,
    MemberController,
  ],
})
export class ApiController {}