5
respostas

[Dúvida] Metodo post do formulario

Olá criei um projeto junto com esse curso só que no meu estilo, não estou conseguindo salvar as informações quando preencho o formulario ao final da pagina, ele deveria salvar e aparecer automaticamente na tela, como posso fazer isso? aqui está meu projeto completo https://github.com/laura-2/ProximaViagem e aqui está o arquivo que estou tentando mandar o metodo post

import React, { useState} from "react";
import './form.css';
import { postViagens } from "../../servicos/viagens";

export default function Form(){
    const [post, setPost] = useState({
        pais: '',
        cidade: '',
        data:'',
        nota: '',
        foto: '',
        descricao: ''
    })
    const handleInput = (event) => {
        setPost({...post, [event.target.name]: event.target.value})
    }

    function handleSubmit(event){
        event.preventDefault()
    }

    async function insertViagem(){
        await postViagens()
        .then(response => console.log(response))
        .catch(err=> console.log(err))
    }
    return(
        <form className="banner" onSubmit={handleSubmit}>
            <h2 className="banner-titulo">Compartilhe sua experiência também!</h2>
            <input type="text" className="banner-caixa" placeholder="Digite o nome do lugar"
            onChange={handleInput} name="pais"/>
            <input type="text" className="banner-caixa" placeholder="Digite o nome da cidade"
            onChange={handleInput} name="cidade"/>
            <input type="date" className="banner-caixa" placeholder="Quando?" onChange={handleInput} name="data"
            />
            <input type="number" className="banner-caixa" placeholder="Qual sua nota para esse lugar?"
            onChange={handleInput} name="nota"/>
            <input type="image" alt="fotos" className="banner-caixa" placeholder="Insira sua fotos" 
            onChange={handleInput} name="foto"/>
            <textarea cols="40" wrap="hard" className="banner-area" placeholder="Conte com mais detalhes sua viagem, por exemplo, o que mais gostou, dicas, valores..."
            onChange={handleInput} name="descricao"></textarea>
            <button className="banner-botão" onClick={()=>insertViagem()}>Compartilhar</button>
        </form>
    )
}

e esse é o erro do console:

POST http://localhost:8000/viagens/ 422 (Unprocessable Entity)

Alguém poderia me dar uma luz?

Obrigada

5 respostas

Opa Laura, tudo certo?

O erro em questão indica que a entidade não pode ser processada, o que pode significar que você está enviando dados inválidos ou faltando algum campo obrigatório.

Percebi que está chamando a função postViagens() no seu componente, mas não passando os dados do post como argumento. Sugiro que tente passar os dados do post como argumento para a função postViagens() e verifique se eles são enviados corretamente para o backend.

Outra possível solução é verificar se os nomes dos campos no seu objeto post correspondem aos nomes esperados pelo backend.

Fico à disposição.

Tenha um bom dia e bons estudos.

Oii, nao consegui fazer passando parametros, sera que tem como fazermos uma chamada de video ou alguem que possa me auxiliar?

Oi Laura, tudo bem?

O erro 422 não é tão comum e pode ser difícil de diagnosticar, pois não fornece muitas informações sobre qual parte da solicitação está causando o problema. Se tratando de um formulário React vamos tentar a seguinte abordagem:

  • Tente depurar ou imprimir a variável de dados antes de enviá-la para verificar se país/cidade e outros são o que você pensa que são. Como assim? Acredito que o seu problema está no envio de dados inválidos para o formulário, o que ocasionalmente resulta no erro 422.

Vou deixar como exemplo do mesmo erro este caso do Stack Overflow para dar uma olhada se quiser.

Em caso de mais dúvidas, me coloco à disposição.

Grande abraço e bons estudos!

ok vou tentar ver se consigo! Muito obrigadoo

Oi, Laura!

Uma coisa que eu reparei é que você tem uma função postViagens(), mas você não está passando o post em si.

Isso pode dar uma dica que esse erro pode estar acontecendo porque não tem dados sendo enviados.

Uma coisa que você pode fazer, pra testar, é utilizar o Postman ou o Insominia e enviar um json direto pra API pra descobrirmos de que lado está o problema.

Consegue testar daí e dar um retorno pra gente?