Construye formularios HTML en páginas de Astro
En modo SSR, las páginas Astro pueden mostrar y manejar formularios. En esta receta, usarás un formulario HTML estándar para enviar datos al servidor. El script de tu frontmatter manejará los datos en el servidor, sin enviar JavaScript al cliente.
Prerrequisitos
Sección titulada Prerrequisitos- Un proyecto con SSR (
output: 'server'
) habilitado
Receta
Sección titulada Receta-
Crea o identifica una página
.astro
que contenga tu formulario y tu código de manejo. Por ejemplo, podrías agregar una página de registro: -
Agrega una etiqueta
<form>
con algunas entradas a la página. Cada entrada debe tener un atributoname
que describa el valor de esa entrada.Asegúrate de incluir un elemento
<button>
o<input type="submit">
para enviar el formulario. -
Usa atributos de validación para proveer validación básica del lado del cliente que funciona incluso si JavaScript está deshabilitado.
En este ejemplo,
required
previene el envío del formulario hasta que el campo esté lleno.minlength
establece una longitud mínima requerida para el texto de entrada.type="email"
también introduce validación que solo aceptará un formato de correo electrónico válido.
Puedes agregar lógica de validación personalizada que se refiera a múltiples campos usando una etiqueta
<script>
y la API de validación de restricciones.Para escribir validación de lógica compleja más fácilmente, puedes construir tu formulario usando un framework de frontend y elegir una librería de formularios como React Hook Form o Felte.
-
El envío del formulario causará que el navegador solicite la página nuevamente. Cambia el método de transferencia de datos del formulario a
POST
para enviar los datos del formulario como parte del cuerpo de laRequest
, en lugar de como parámetros de URL. -
Comprueba el método
POST
en el frontmatter y accede a los datos del formulario usandoAstro.request.formData()
. Envuelve esto en un bloquetry ... catch
para manejar los casos en los que la solicitudPOST
no fue enviada por un formulario y elformData
es inválido. -
Valida los datos del formulario en el servidor. Esto debería incluir la misma validación realizada en el cliente para evitar envíos maliciosos a tu endpoint y brindar soporte a los raros navegadores heredados que no tienen validación de formularios.
También puedes incluir validación que no se puede hacer en el cliente. Por ejemplo, este ejemplo verifica si el correo electrónico ya está en la base de datos.
Los mensajes de error pueden ser enviados al cliente almacenándolos en un objeto
errors
y accediendo a él en la plantilla.