Aller au contenu principal

createRoute()

La fonction createRoute() crée des routes typées de manière sûre avec validation Zod. Lorsqu’un openapiPath est configuré sur l’adaptateur de serveur, elle génère des entrées de schéma OpenAPI à partir des schémas Zod fournis.

Importation
Lien direct vers Importation

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

Signature
Lien direct vers Signature

function createRoute<TPath, TQuery, TBody, TResponse, TResponseType>(
config: RouteConfig<TPath, TQuery, TBody, TResponse, TResponseType>,
): ServerRoute

Paramètres
Lien direct vers Paramètres

method:

'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'ALL'
Méthode HTTP

path:

string
Chemin de route avec paramètres facultatifs (par exemple, /api/items/:id)

responseType:

'json' | 'stream'
Format de réponse. Les routes internes peuvent utiliser des types supplémentaires (datastream-response, mcp-http, mcp-sse).

handler:

ServerRouteHandler
Fonction de gestion de la route

pathParamSchema?:

ZodSchema
Valide les paramètres du chemin d’URL

queryParamSchema?:

ZodSchema
Valide les paramètres de la chaîne de requête

bodySchema?:

ZodSchema
Valide le corps de la requête

responseSchema?:

ZodSchema
Documente la forme de la réponse pour OpenAPI

streamFormat?:

'sse' | 'stream'
Format de flux (lorsque responseType est 'stream')

maxBodySize?:

number
Remplace la limite de taille du corps par défaut, en octets

summary?:

string
Résumé OpenAPI

description?:

string
Description OpenAPI

tags?:

string[]
Balises OpenAPI

deprecated?:

boolean
Marque la route comme obsolète

onValidationError?:

(error: ZodError, context: 'query' | 'body' | 'path') => { status: number; body: unknown } | undefined
Gestionnaire personnalisé des erreurs de validation pour cette route. Remplace le hook onValidationError au niveau du serveur. Renvoyez { status, body } pour personnaliser la réponse, ou undefined pour utiliser le comportement par défaut.

Paramètres du gestionnaire
Lien direct vers Paramètres du gestionnaire

Le gestionnaire reçoit les paramètres validés et le contexte d’exécution :

handler: async params => {
// From schemas (typed from Zod)
params.id // From pathParamSchema
params.filter // From queryParamSchema
params.name // From bodySchema

// Runtime context (always available)
params.mastra // Mastra instance
params.requestContext // Request-scoped context
params.tools // Available tools
params.abortSignal // Request cancellation signal
params.taskStore // A2A task storage
}

Valeur renvoyée
Lien direct vers Valeur renvoyée

Renvoie un objet ServerRoute qui peut être enregistré auprès d’un adaptateur.

Exemples
Lien direct vers Exemples

Route GET avec paramètres de chemin
Lien direct vers Route GET avec paramètres de chemin

import { createRoute } from '@mastra/server/server-adapter'
import { z } from 'zod'

const getAgent = createRoute({
method: 'GET',
path: '/api/agents/:agentId',
responseType: 'json',
pathParamSchema: z.object({
agentId: z.string(),
}),
responseSchema: z.object({
name: z.string(),
description: z.string().optional(),
}),
summary: 'Get agent by ID',
tags: ['Agents'],
handler: async ({ agentId, mastra }) => {
return mastra.getAgent(agentId)
},
})

Route POST avec corps de requête
Lien direct vers Route POST avec corps de requête

const createItem = createRoute({
method: 'POST',
path: '/api/items',
responseType: 'json',
bodySchema: z.object({
name: z.string(),
value: z.number(),
}),
responseSchema: z.object({
id: z.string(),
name: z.string(),
value: z.number(),
}),
handler: async ({ name, value, mastra }) => {
// name and value are typed from bodySchema
return { id: 'new-id', name, value }
},
})

Paramètres de requête avec coercition
Lien direct vers Paramètres de requête avec coercition

const listItems = createRoute({
method: 'GET',
path: '/api/items',
responseType: 'json',
queryParamSchema: z.object({
page: z.coerce.number().default(0),
limit: z.coerce.number().default(50),
enabled: z.coerce.boolean().optional(),
}),
handler: async ({ page, limit, enabled, mastra }) => {
// page, limit, enabled are typed and coerced
return { items: [], page, limit }
},
})

Route en flux continu
Lien direct vers Route en flux continu

const streamAgent = createRoute({
method: 'POST',
path: '/api/agents/:agentId/stream',
responseType: 'stream',
streamFormat: 'sse',
pathParamSchema: z.object({
agentId: z.string(),
}),
bodySchema: z.object({
messages: z.array(z.any()),
}),
handler: async ({ agentId, messages, mastra, abortSignal }) => {
const agent = mastra.getAgent(agentId)
return agent.stream(messages, { abortSignal })
},
})

Limite de taille de corps personnalisée
Lien direct vers Limite de taille de corps personnalisée

const uploadRoute = createRoute({
method: 'POST',
path: '/api/upload',
responseType: 'json',
maxBodySize: 50 * 1024 * 1024, // 50MB
bodySchema: z.object({
file: z.string(),
}),
handler: async ({ file }) => {
return { uploaded: true }
},
})

Modèles de schéma
Lien direct vers Modèles de schéma

Passage direct pour l’extensibilité
Lien direct vers Passage direct pour l’extensibilité

const bodySchema = z
.object({
required: z.string(),
})
.passthrough() // Allow unknown fields

Coercition de date
Lien direct vers Coercition de date

const querySchema = z.object({
fromDate: z.coerce.date().optional(),
toDate: z.coerce.date().optional(),
})

Types union
Lien direct vers Types union

const bodySchema = z.object({
messages: z.union([z.array(z.any()), z.string()]),
})

Gestion des erreurs
Lien direct vers Gestion des erreurs

Levez une erreur avec une propriété status pour renvoyer des codes d’état HTTP précis depuis les gestionnaires. Si vous utilisez Hono, vous pouvez utiliser HTTPException depuis hono/http-exception :

import { createRoute } from '@mastra/server/server-adapter'
import { HTTPException } from 'hono/http-exception'

const getAgent = createRoute({
method: 'GET',
path: '/api/agents/:agentId',
responseType: 'json',
pathParamSchema: z.object({ agentId: z.string() }),
handler: async ({ agentId, mastra }) => {
const agent = mastra.getAgent(agentId)
if (!agent) {
throw new HTTPException(404, { message: `Agent '${agentId}' not found` })
}
return agent
},
})

Pour Express ou du code indépendant du framework, levez une erreur avec une propriété status :

class HttpError extends Error {
constructor(
public status: number,
message: string,
) {
super(message)
}
}

// In handler:
throw new HttpError(404, `Agent '${agentId}' not found`)

Codes d’état courants :

CodeSignification
400Requête incorrecte
401Non autorisé
403Interdit
404Introuvable
500Erreur interne du serveur