跳至主要內容

MastraServer

MastraServer 抽象類是所有伺服器轉接器的基類。擴展此類可為 Hono 或 Express 以外的框架建立轉接器。

匯入
「匯入」的直接連結

import { MastraServer } from '@mastra/server/server-adapter'

類型參數
「類型參數」的直接連結

MastraServer<TApp, TRequest, TResponse>
參數描述
TApp框架應用類型(例如 HonoApplication
TRequest框架請求類型
TResponse框架回應/情境類型

建構函式
「建構函式」的直接連結

constructor(options: MastraServerOptions<TApp>)

選項
「選項」的直接連結

app:

TApp
框架應用程式執行個體

mastra:

Mastra
Mastra 執行個體

prefix?:

string
= ''
路由路徑前綴(例如 /api/v2

openapiPath?:

string
= ''
提供 OpenAPI 規格的路徑

bodyLimitOptions?:

BodyLimitOptions
請求主體大小限制

streamOptions?:

StreamOptions
= { redact: true }
串流遮罩設定

customRouteAuthConfig?:

Map<string, boolean>
依路由設定的認證覆寫項

tools?:

Record<string, Tool>
伺服器可用的 Tool

taskStore?:

InMemoryTaskStore
用於 A2A(Agent-to-Agent)操作的任務儲存

mcpOptions?:

MCPOptions
適用於無伺服器環境的 MCP 傳輸選項

抽象方法
「抽象方法」的直接連結

轉接器必須實現以下方法:

registerContextMiddleware()
「registercontextmiddleware」的直接連結

為每個請求附加 Mastra 情境。

abstract registerContextMiddleware(): void

要附加的情境:

  • mastra - Mastra 執行個體
  • requestContext - 請求範圍的情境
  • tools - 可用的 Tool
  • abortSignal - 請求取消訊號

registerAuthMiddleware()
「registerauthmiddleware」的直接連結

初始化期間執行轉接器認證hook。當認證依路由強制執行時,官方轉接器可以將其實現為無操作。

abstract registerAuthMiddleware(): void

registerRoute()
「registerroute」的直接連結

向框架註冊單一路由。

abstract registerRoute(
app: TApp,
route: ServerRoute,
options: { prefix?: string }
): Promise<void>

getParams()
「getparams」的直接連結

從請求中提取參數。

abstract getParams(
route: ServerRoute,
request: TRequest
): Promise<{
urlParams: Record<string, string>;
queryParams: Record<string, string>;
body: unknown;
}>

sendResponse()
「sendresponse」的直接連結

根據路由類型傳送回應。

abstract sendResponse(
route: ServerRoute,
response: TResponse,
result: unknown
): Promise<unknown>

stream()
「stream」的直接連結

處理串流回應。

abstract stream(
route: ServerRoute,
response: TResponse,
result: unknown
): Promise<unknown>

執行個體方法
「執行個體方法」的直接連結

init()
「init」的直接連結

透過註冊所有 middleware 和路由來初始化伺服器。

async init(): Promise<void>

依以下順序呼叫:

  1. registerContextMiddleware()
  2. registerAuthMiddleware()
  3. registerRoutes()

registerRoutes()
「registerroutes」的直接連結

註冊所有 Mastra 路由。

async registerRoutes(): Promise<void>

getApp()
「getapp」的直接連結

取得框架應用程式執行個體。

getApp<T = TApp>(): T

parsePathParams()
「parsepathparams」的直接連結

使用該路由的 Zod schema 驗證路徑參數。

async parsePathParams(
route: ServerRoute,
params: Record<string, string>
): Promise<Record<string, unknown>>

parseQueryParams()
「parsequeryparams」的直接連結

使用該路由的 Zod schema 驗證查詢參數。

async parseQueryParams(
route: ServerRoute,
params: Record<string, string>
): Promise<Record<string, unknown>>

parseBody()
「parsebody」的直接連結

使用該路由的 Zod schema 驗證請求主體。

async parseBody(
route: ServerRoute,
body: unknown
): Promise<unknown>

registerOpenAPIRoute()
「registeropenapiroute」的直接連結

註冊一個提供 OpenAPI 規格的 endpoint。

async registerOpenAPIRoute(
app: TApp,
config: OpenAPIConfig,
options: { prefix?: string }
): Promise<void>

受保護的方法
「受保護的方法」的直接連結

mergeRequestContext()
「mergerequestcontext」的直接連結

合併來自多個來源(查詢參數和請求主體)的請求情境。

protected mergeRequestContext(options: {
paramsRequestContext?: Record<string, any>;
bodyRequestContext?: Record<string, any>;
}): RequestContext

類型
「類型」的直接連結

BodyLimitOptions
「bodylimitoptions」的直接連結

interface BodyLimitOptions {
maxSize: number
onError: (error: unknown) => unknown
}

StreamOptions
「streamoptions」的直接連結

interface StreamOptions {
redact?: boolean
}

MCPOptions
「MCPOptions」的直接連結

interface MCPOptions {
serverless?: boolean
sessionIdGenerator?: () => string
}
屬性描述
serverless設為 true 時,會以不進行會話管理的無狀態模式執行 MCP。適用於 Cloudflare Workers 或 Vercel Edge 等無伺服器環境。
sessionIdGenerator用於產生會話 ID 的自訂函式。

範例
「範例」的直接連結

import { MastraServer, ServerRoute } from '@mastra/server/server-adapter'
import type { Mastra } from '@mastra/core'

export class MyServer extends MastraServer<MyApp, MyRequest, MyResponse> {
registerContextMiddleware(): void {
this.app.use('*', (req, res, next) => {
res.locals.mastra = this.mastra
next()
})
}

registerAuthMiddleware(): void {
const auth = this.mastra.getServer()?.auth
if (!auth) return
// Register global auth middleware, or leave this empty and
// enforce auth when routes are registered.
}

async registerRoute(app, route, { prefix }) {
// Implement route registration
}

async getParams(route, request) {
return {
urlParams: request.params,
queryParams: request.query,
body: request.body,
}
}

async sendResponse(route, response, result) {
return response.json(result)
}

async stream(route, response, result) {
// Implement streaming
}
}