pessoal pq teve que passar o autor para string? quando recebe a requesiçao do http ja nao vem como texto?
pessoal pq teve que passar o autor para string? quando recebe a requesiçao do http ja nao vem como texto?
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:
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?
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.