Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

json.stringfy

pessoal pq teve que passar o autor para string? quando recebe a requesiçao do http ja nao vem como texto?

7 respostas

Fala ai Luan, tudo bem? Foi necessário utilizar o stringify para transformar o objeto JavaScript em texto, isso é necessário pois em alguns momentos pode ser que seu back não esteja preparado para receber um objeto JSON direto.

E as informações que trafegamos na rede são enviadas via texto e não objeto, sendo assim, quando esse texto chegar na API a mesma será responsável por convertê-lo de volta para um objeto.

Espero ter ajudado.

fala ae maheus beleza?

escutadorDeSubmit = autor => {
    ApiService.criaAutor(JSON.stringify(autor))
    .then(resp=>resp.data)
    .then(resp=>this.setState({ autores: [...this.state.autores, resp] }))
 criaAutor:(autor) =>
    {
        return fetch('http://localhost:8000/api/autor',{method:'POST',headers:{'content-type':'application/json'},body:autor})
        .then(resp=> resp.json())
    },

ai estao a chamada do metodo e a criaçao dele, quando chamo e convertido para string, mas la no fet e convertido para json?

mas quando trafego dados pelo http ja nao vem como texto? pq devo converter mais uma vez ?

Fala ai Luan, vamos lá:

ai estao a chamada do metodo e a criaçao dele, quando chamo e convertido para string, mas la no fet e convertido para json?

No caso, a função criaAutor recebe objeto convertido já para string e manda essa string como body para a fetch.

mas quando trafego dados pelo http ja nao vem como texto? pq devo converter mais uma vez ?

Ele vem como texto porque as linguagens na maioria das vezes realizam e cuidam dessa abstração para a gente, por exemplo a axios, a gente passa um objeto direto para ela, mas, por baixo dos panos antes de realizar a requisição ela converte para string com o stringify.

Mas porque precisamos fazer isso? Isso porque a requisição pode receber N tipos de body, sendo eles:

  • String text/plain;charset=UTF-8
  • URLSearchParams application/x-www-form-urlencoded;charset=UTF-8
  • FormData multipart/form-data
  • Blob inherited from the blob.type property
  • ArrayBuffer
  • TypedArray
  • DataView

Ficaria muito dificil para a engine do JavaScript lidar com essa conversão, então, a gente faz isso para deixar mais claro e menos trabalho para a engine em si.

Espero ter ajudado.

fala ae matheus ,quando pego os dados do form vem texto correto? mas mesmo assim faço esse stringfy, e por boa pratica? poderia deixar sem ele que funcionaria? outra coisa, quando faço esse apllication/json nao quer dizer que ao inves de texto , no body eu envio um json?

o que eu quis dizer foi o seguinte: pego como texto , mas devido ao application/json , esse texto e convertido pra json , e isso que ocorre?

solução!

Fala ai Luan, Vamos lá:

quando pego os dados do form vem texto correto?

Sim, os valores são string's.

mas mesmo assim faço esse stringfy, e por boa pratica?

Nesse caso o stringify foi feito porque o valor do autor é um objeto, então a gente precisa transformar esse objeto para texto, exemplo:

const autor = { nome: 'Matheus', idade: 26 }

JSON.stringify(autor) // '{"nome": "Matheus", "idade": "26" }'

poderia deixar sem ele que funcionaria?

Se você deixar sem, provavelmente vai dar problema na hora de enviar esse objeto no body da requisição.

quando faço esse apllication/json nao quer dizer que ao inves de texto , no body eu envio um json?

Sim, mas, o json em si vem como texto e não já convertido para objeto, dessa maneira, quando a gente define o application/json temos uma segurança que podemos fazer o JSON.parse do body da resposta que não vai quebrar, exemplo:

// funciona
JSON.parse('{"nome": "Matheus", "idade": "26" }')

// erro
JSON.parse('Matheus')

pego como texto , mas devido ao application/json , esse texto e convertido pra json , e isso que ocorre?

Não, o autor é um objeto que possui propriedades cujo seus valores são string's, mas, poderiam ser booleanas, numeros, array, outros objetos e por ai vai...

Sendo assim, a gente converte o objeto para string (texto) antes de enviar para a API.

Espero ter ajudado.

vlw matheus, entendi agora

Magina Luan, sempre que precisar não deixe de criar suas duvidas.

Abraços e bons estudos.