Crie formulários HTML em páginas Astro
No modo SSR, as páginas Astro podem exibir e manipular formulários. Nesta receita, você usará um formulário HTML padrão para enviar dados ao servidor. O seu script frontmatter manipulará os dados no servidor, sem enviar qualquer JavaScript para o cliente.
Pré-requisitos
Seção intitulada Pré-requisitos- Um projeto com SSR (
output: 'server'
) ativado
Receita
Seção intitulada Receita-
Crie ou identifique uma página
.astro
que irá conter o formulário e seu código de manipulação. Por exemplo, você pode adicionar uma página de registro: -
Adicione uma tag
<form>
com alguns inputs na página. Cada input deve ter um atributoname
que descreva o valor daquele campo.Certifique-se de incluir um elemento
<button>
ou<input type="submit">
para enviar o formulário. -
Use atributos de validação para fornecer validação básica no lado do cliente, mesmo que o JavaScript esteja desativado.
Neste exemplo,
required
impede o envio do formulário até que o campo seja preenchido.minlength
define um comprimento mínimo para o campo.type="email"
adiciona validação para aceitar apenas um formato de email válido.
Você pode adicionar lógica de validação personalizada que refere-se a vários campos usando a tag
<script>
e a Constraint Validation API.Para escrever lógica de validação complexa mais facilmente, você pode construir seu formulário usando um framework frontend e escolher uma biblioteca de formulários como React Hook Form ou Felte.
-
O envio do formulário fará o navegador solicitar novamente a página. Altere a transferência de dados do formulário
method
paraPOST
para enviar os dados do formulário como parte do corpo deRequest
, em vez de como parâmetros na URL. -
Verifique o método
POST
no frontmatter e acesse os dados do formulário usandoAstro.request.formData()
. Envolva isso em um blocotry ... catch
para lidar com os casos em que a solicitaçãoPOST
não foi enviada por um formulário ou quando oformData
é inválido. -
Valide os dados do formulário no servidor. Isso deve incluir a mesma validação feita no lado do cliente para evitar envios maliciosos ao seu endpoint e para dar suporte aos raros navegadores legado que não possuem validação de formulário.
Isso também pode incluir validação que não pode ser feita no lado do cliente. Por exemplo, o exemplo abaixo verifica se o email já está no banco de dados.
Mensagens de erro podem ser enviadas de volta para o cliente armazenando-as em um objeto
errors
e acessando-as no template.