5
respostas

url encoded

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?

5 respostas

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 trueiremos 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:

  1. 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

  1. 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 jsoncomo 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 :)