estou dando uma revisada aqui, o que realamente faz o metodo urlenconded, achei que os valores vindos do formulario viriam pela url, mas nao é isso, o que e feito? ele retorna um objeto assim como o json?
estou dando uma revisada aqui, o que realamente faz o metodo urlenconded, achei que os valores vindos do formulario viriam pela url, mas nao é isso, o que e feito? ele retorna um objeto assim como o json?
Olá Luan, tudo bem?
Nós teremos os dados vindos da url
quando queremos pegar através do req.query
, fora isso, quando recebemos dados de um formulário ele vem no body
mas num formato um pouco diferente, ele vem num fluxo de dados que teríamos que utilizar um Buffer para transformar em algo que a gente entenda, por exemplo essa transformação abaixo serve para pegar os dados em formato JSON de uma requisição e transformar em algo para o mundo javascript:
let response = [];
req.on('data', chunk => {
console.log(chunk);
response.push(chunk);
}).on('end', () => {
response = Buffer.concat(response).toString();
console.log(`response: ${response}`);
})
Ao fazer uma requisição teríamos as seguintes respostas no console:
<Buffer 7b 0a 09 22 6e 6f 6d 65 22 3a 20 22 47 65 6f 76 61 6e 69 22 2c 0a 09 22 69 64 61 64 65 22 3a 20 32 31 0a 7d>
response: {
"nome": "Rogerio",
"idade": 44
}
Ou seja, temos todo um processo de transformar os dados da requisição em algo que faça sentido para nós, e nisso entra o BodyParser
com o urlenconded
, o que ele faz é um processo parecido para dados do formulário, ele vai pegar os dados no formato que a web nos envia e transformar para uma maneira mais organizada, e essa opção extended: true
é apenas uma opção da biblioteca que será utilizada para fazer essa conversão, quando passamos true
iremos utilizar uma biblioteca chamada qs
para trabalhar com objetos json
mais complexos :)
Dessa forma não precisamos fazer o processo que citei acima, pois ele é um dos primeiros pontos (middlewares) que os dados passam, então quando chegam a nós já podemos trabalhar normalmente
Conseguiu Compreender? Abraços e Bons Estudos!
var bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
vlw ae geovanni, neste exemplo , quando utilizado o urlenconded ele transforma os dados em texto depois para json , e isso?
Opa Luan,
Nesse caso são 2 coisas:
bodyParser.urlenconded( { extended: true } );
Essa parte irá fazer esse processo de transformar fluxo de dados ( vindo de um formulário HTML) em um formato de objeto Javascript
bodyParser.json()
Essa parte irá fazer esse processo de transformar vindo de JSON
via Postman, Imsonmnia, Curl
em um formato de objeto
Enquanto combinamos os 2 para receber requisições de todos os formatos possíveis :)
Abraços!
vlw cara , por mais essa , so me esclarece mais uma coisa que nao entendi direito, qual a real diferença de usar extended true ou false?
Então Luan,
Existe algumas estruturas que são um pouco mais complexas dentro do json
como por exemplo:
"nome": "Geovani",
"idade": 20,
"animal_estimacao": {
"tipo": "Cachorro":
"raca" "Dachshund"
}
}
Essa parte do animal_estimacao
como o valor dela é um outro objeto, dizemos que temos "objetos aninhados"
Quando dizemos que iremos utilizar extended: true
por debaixo dos panos a biblioteca que vai transformar o fluxo em objeto javascript será uma chamada qs
que é capaz de transformar esse nosso JSON em objeto
Caso seja false
ele irá utilizar uma biblioteca chamada query string
que não é capaz de transformar esse json
pois ele é complexo demais :)
Então passando true
utilizamos uma biblioteca um pouco mais robusta em fazer a conversão!
Abraços :)