> Discover all available pages from the documentation index: https://mastra.zisheng.pro/zh-TW/llms.txt # Koa 轉接器 `@mastra/koa` 套件提供了一個 Server 轉接器,用於透過 [Koa](https://koajs.com) 執行 Mastra。有關通用轉接器概念(建構函式選項、初始化流程等),請參閱 [Server Adapters](https://mastra.zisheng.pro/zh-TW/docs/server/server-adapters)。 ## 安裝 安裝 Koa 轉接器和 Koa 框架: **npm**: ```bash npm install @mastra/koa@latest koa koa-bodyparser ``` **pnpm**: ```bash pnpm add @mastra/koa@latest koa koa-bodyparser ``` **Yarn**: ```bash yarn add @mastra/koa@latest koa koa-bodyparser ``` **Bun**: ```bash bun add @mastra/koa@latest koa koa-bodyparser ``` ## 使用範例 ```typescript import Koa from 'koa' import bodyParser from 'koa-bodyparser' import { MastraServer } from '@mastra/koa' import { mastra } from './mastra' const app = new Koa() app.use(bodyParser()) const server = new MastraServer({ app, mastra }) await server.init() app.listen(3000, () => { console.log('Server running on http://localhost:3000') }) ``` ## 建構函式參數 **app** (`Koa`): Koa app 執行個體 **mastra** (`Mastra`): Mastra 執行個體 **prefix** (`string`): 路由路徑前綴(例如,/api/v2) (Default: `''`) **openapiPath** (`string`): 提供 OpenAPI 規格的路徑(例如,/openapi.json) (Default: `''`) **bodyLimitOptions** (`BodyLimitOptions`): 請求請求主體大小限制 **streamOptions** (`StreamOptions`): 串流遮罩設定。為 true(預設值)時,會在將串流 chunk 傳送給使用者端之前,從中刪除敏感資料(系統 prompt、Tool 定義、API 金鑰)。 (Default: `{ redact: true }`) **customRouteAuthConfig** (`Map`): 依路由覆寫身分驗證。鍵為 METHOD:PATH(例如,GET:/api/health)。值為 false 時路由公開,值為 true 時需要身分驗證。 **tools** (`ToolsInput`): Server 可用的 Tool **taskStore** (`InMemoryTaskStore`): 用於 A2A(Agent-to-Agent)操作的任務儲存 **mcpOptions** (`MCPOptions`): MCP 傳輸選項。對於 Cloudflare Workers 或 Vercel Edge 等無狀態環境,請設定 serverless: true。 ## 錯誤處理 Koa 轉接器會沿 Koa 的 middleware 鏈向上傳播路由處理常式中的錯誤,並遵循 Koa 的標準錯誤處理模式。這意味著可以使用常規 Koa 錯誤處理 middleware: ```typescript const app = new Koa() app.use(bodyParser()) // Your error middleware catches errors from Mastra route handlers app.use(async (ctx, next) => { try { await next() } catch (err) { ctx.status = err.status || 500 ctx.body = { error: err.message } // Log, report to Sentry, etc. } }) const server = new MastraServer({ app, mastra }) await server.init() ``` 同樣支援 [`server.onError`](https://mastra.zisheng.pro/zh-TW/reference/configuration) hook。設定後,它會在錯誤傳播至 middleware 之前呼叫,且會直接使用其回應: ```typescript const mastra = new Mastra({ server: { onError: (err, c) => { console.error('Unhandled error:', err) return c.json({ error: err.message }, 500) }, }, }) ``` 使用 `init()` 時,還會註冊全域錯誤處理 middleware 作為安全網。到達此 middleware 的錯誤會遵循標準 Koa 約定,透過 `ctx.app.emit('error', err, ctx)` 發出。 ## 保護原始路由 若要使用 Mastra 管理的身分驗證和 `requiresAuth` 等路由中繼資料,請優先使用 [`registerApiRoute()`](https://mastra.zisheng.pro/zh-TW/reference/server/register-api-route)。對於直接掛載在 app 上的原始 Koa 路由,請使用 `createAuthMiddleware()`: ```typescript import Koa from 'koa' import { createAuthMiddleware, MastraServer } from '@mastra/koa' import { mastra } from './mastra' const app = new Koa() const server = new MastraServer({ app, mastra }) await server.init() app.use(createAuthMiddleware({ mastra })) app.use(async ctx => { if (ctx.path !== '/custom/protected') return const user = ctx.state.requestContext.get('user') ctx.body = { user } }) ``` ## 手動初始化 如需自訂 middleware 順序,請分別呼叫每個方法,而不是呼叫 `init()`。詳見[手動初始化](https://mastra.zisheng.pro/zh-TW/docs/server/server-adapters)。 ## 範例 - [Koa Adapter](https://github.com/mastra-ai/mastra/tree/main/examples/server-koa-adapter):基本 Koa Server 設定 ## 相關內容 - [Server Adapters](https://mastra.zisheng.pro/zh-TW/docs/server/server-adapters):共享的轉接器概念 - [MastraServer Reference](https://mastra.zisheng.pro/zh-TW/reference/server/mastra-server):完整 API 參考 - [createRoute() Reference](https://mastra.zisheng.pro/zh-TW/reference/server/create-route):建立類型安全的自訂路由