ApiFormOptions
interfaz Desde 1.7.0
Opciones de un endpoint que acepta formularios HTML nativos con form (desde 1.7): un
<form method="post"> que funciona sin JavaScript, enviado como
application/x-www-form-urlencoded o multipart/form-data.
import type { ApiFormOptions } from "@meekojs/meeko/server";Código fuente src/server/api/contracts.ts:53
Declaración #
interface ApiFormOptions<Result = unknown, S = unknown> {
readonly redirect?: (result: Result, context: RequestContext<S>) => string | Promise<string>
readonly maxBytes?: number
readonly files?: boolean
readonly echo?: readonly string[]
}Parámetros de tipo #
-
Result= unknown Lo que recibe
redirect: la respuesta validada conresponse,undefinedconstatus: 204o elResponsedel handler concontentType: "response".-
S= unknown Tipo de los servicios.
Ejemplo #
// server/api/feedback.post.ts
import { defineApiRoute } from "@meekojs/meeko/server";
import { feedbackInput, feedbackSaved } from "../../shared/schemas/feedback.js";
import { saveFeedback } from "../utils/feedback.js";
export default defineApiRoute({
body: feedbackInput,
response: feedbackSaved,
// Tras un error, el comentario vuelve a la página; ningún otro valor.
form: { redirect: (saved) => `/gracias?id=${saved.id}`, echo: ["comment"] },
handler: ({ body }) => saveFeedback(body),
});Propiedades #
redirect
#
readonly redirect?: (result: Result, context: RequestContext<S>) => string | Promise<string>Ruta de esta aplicación a la que vuelve un envío correcto con 303 See Other, como
/gracias. Sin ella, la del campo return del formulario, la de Referer o /. Una ruta de
otro origen, con //, \ o un esquema se sustituye por /.
maxBytes
#
readonly maxBytes?: numberTamaño máximo del cuerpo en bytes; por defecto 1 MiB, como el JSON. Por encima, BODY_TOO_LARGE.
files
#
readonly files?: booleanCon true, un multipart/form-data puede traer archivos, que llegan al schema de body como
File. Sin él, un archivo responde FILES_NOT_ALLOWED (400).
echo
#
readonly echo?: readonly string[]Campos cuyo valor enviado vuelve a la página tras un envío con errores, para que el SSR los
pinte de nuevo, como ["name", "email"]. Por defecto ninguno: sólo vuelven el código y los
issues, y los campos muestran initial. Los valores viajan en una cookie de un solo uso y en
el HTML de la página, así que no incluyas contraseñas, números de tarjeta ni otros datos
sensibles; aun así, los nombres que parecen credenciales (password, token, secret, cvc…)
nunca se devuelven. Sólo vuelven texto, números y booleanos, nunca archivos.
Véase también #
- Formularios sin JavaScript: form Framework full-stack