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.
ImportationLien direct vers Importation
import { createRoute } from '@mastra/server/server-adapter'
SignatureLien direct vers Signature
function createRoute<TPath, TQuery, TBody, TResponse, TResponseType>(
config: RouteConfig<TPath, TQuery, TBody, TResponse, TResponseType>,
): ServerRoute
ParamètresLien 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
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 gestionnaireLien 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éeLien direct vers Valeur renvoyée
Renvoie un objet ServerRoute qui peut être enregistré auprès d’un adaptateur.
ExemplesLien direct vers Exemples
Route GET avec paramètres de cheminLien 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êteLien 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 coercitionLien 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 continuLien 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éeLien 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émaLien 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 dateLien direct vers Coercition de date
const querySchema = z.object({
fromDate: z.coerce.date().optional(),
toDate: z.coerce.date().optional(),
})
Types unionLien direct vers Types union
const bodySchema = z.object({
messages: z.union([z.array(z.any()), z.string()]),
})
Gestion des erreursLien 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 :
| Code | Signification |
|---|---|
| 400 | Requête incorrecte |
| 401 | Non autorisé |
| 403 | Interdit |
| 404 | Introuvable |
| 500 | Erreur interne du serveur |
Ressources associéesLien direct vers Ressources associées
- Routes de serveur: Routes Mastra par défaut
- MastraServer: Classe d’adaptateur de serveur
- Adaptateurs de serveur: Utiliser des adaptateurs