> Discover all available pages from the documentation index: https://mastra.zisheng.pro/fr/llms.txt # 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 ```typescript import { createRoute } from '@mastra/server/server-adapter' ``` ## Signature ```typescript function createRoute( config: RouteConfig, ): ServerRoute ``` ## 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 Le gestionnaire reçoit les paramètres validés et le contexte d’exécution : ```typescript 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 Renvoie un objet `ServerRoute` qui peut être enregistré auprès d’un adaptateur. ## Exemples ### Route GET avec paramètres de chemin ```typescript 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 ```typescript 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 ```typescript 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 ```typescript 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 ```typescript 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 ### Passage direct pour l’extensibilité ```typescript const bodySchema = z .object({ required: z.string(), }) .passthrough() // Allow unknown fields ``` ### Coercition de date ```typescript const querySchema = z.object({ fromDate: z.coerce.date().optional(), toDate: z.coerce.date().optional(), }) ``` ### Types union ```typescript const bodySchema = z.object({ messages: z.union([z.array(z.any()), z.string()]), }) ``` ## 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` : ```typescript 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` : ```typescript 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ées - [Routes de serveur](https://mastra.zisheng.pro/fr/reference/server/routes): Routes Mastra par défaut - [MastraServer](https://mastra.zisheng.pro/fr/reference/server/mastra-server): Classe d’adaptateur de serveur - [Adaptateurs de serveur](https://mastra.zisheng.pro/fr/docs/server/server-adapters): Utiliser des adaptateurs