O que o body-parser faz com o express?

Eu não entendo porque precisamos de body-parser em um aplicativo Express, já que podemos obter dados sem usar body-parser . E o que isso faz realmente e como?

Para manipular a solicitação HTTP POST no Express.js versão 4 e superior, é necessário instalar o módulo de middleware chamado body-parser .

body-parser extrai a parte inteira do corpo de um stream de solicitação de input e o expõe no req.body do req.body .

O middleware fazia parte do Express.js anteriormente, mas agora você precisa instalá-lo separadamente.

Esse módulo de body-parser analisa os dados codificados JSON, buffer, string e URL enviados usando a solicitação HTTP POST . Instale o body-parser usando NPM como mostrado abaixo.

 npm install body-parser --save 

A resposta aqui explica isso de maneira muito detalhada e shiny, a resposta contém:

Em resumo; O analisador de corpo extrai toda a parte do corpo de um stream de solicitação de input e o expõe no req.body do req.body como algo mais fácil de se conectar. Você não precisa, por si só, porque você poderia fazer tudo isso sozinho. No entanto, provavelmente fará o que quiser e poupará o seu trabalho.


Para ir um pouco mais em profundidade; O body-parser fornece um middleware que usa o nodejs / zlib para descompactar os dados do pedido de input se ele for zipado e o stream-utils / raw-body aguardar o conteúdo completo e bruto do corpo da solicitação antes de “analisá-lo” (isso significa que você não ia usar o corpo da solicitação, você só perdeu algum tempo).

Depois de ter o conteúdo bruto, o analisador de corpo irá analisá-lo usando uma das quatro estratégias, dependendo do middleware específico que você decidiu usar:

  • bodyParser.raw () : Na verdade, não analisa o corpo, mas apenas expõe o conteúdo em buffer de antes em um Buffer no req.body .

  • bodyParser.text () : Lê o buffer como texto simples e expõe a string resultante no req.body.

  • bodyParser.urlencoded () : Analisa o texto como dados codificados de URL (que é como os navegadores tendem a enviar dados de formulário de formulários regulares definidos para POST) e expõe o object resultante (contendo as chaves e valores) no req.body . Para comparação; No PHP, tudo isso é feito automaticamente e exposto em $_POST .

  • bodyParser.json () : Analisa o texto como JSON e expõe o object resultante no req.body .

Somente depois de configurar o req.body para o conteúdo desejável, ele chamará o próximo middleware na pilha, que poderá acessar os dados da solicitação sem ter que pensar em como descompactá-lo e analisá-lo.

Você pode consultar o github body-parser para ler sua documentação, ele contém informações sobre seu funcionamento.

Ele analisa o corpo da solicitação HTTP. Isso geralmente é necessário quando você precisa saber mais do que apenas a URL que você acertou, em particular no contexto de uma solicitação HTTP POST ou PUT PATCH em que as informações desejadas estão contidas no corpo.

Basicamente, é um middleware para analisar JSON, texto simples ou apenas retornar um object Buffer bruto para que você lide conforme necessário.

Sim, podemos trabalhar sem body-parser . Quando você faz isso, obtém a solicitação bruta e seu corpo e headers não estão no object raiz. Você terá que manipular individualmente todos os campos.

Ou você pode usar body-parser , já que a equipe expressa está mantendo isso.

O body-parser pode fazer por você: simplifica a solicitação.
Como usar: Aqui está um exemplo:

Instale npm install body-parser --save

Isto é como usar body-parser em express:

 const express = require('express'), app = express(), bodyParser = require('body-parser'); // support parsing of application/json type post data app.use(bodyParser.json()); //support parsing of application/x-www-form-urlencoded post data app.use(bodyParser.urlencoded({ extended: true })); 

Ligação.

https://github.com/expressjs/body-parser

Para obter access aos dados do post, precisamos usar o body-parser . Basicamente, o body-parser do body-parser é o que permite expressar para ler o corpo e, em seguida, analisar isso em um object Json que podemos entender.

Tudo isso é uma questão de conveniência.

Basicamente, se a pergunta fosse ‘Nós precisamos usar body-parser ?’ A resposta é não’. Podemos obter as mesmas informações do cliente pós-solicitação usando uma rota mais indireta que geralmente será menos flexível e aumentará a quantidade de código que temos que escrever para obter as mesmas informações.

Isso é o mesmo que perguntar ” Precisamos usar o express para começar?” Mais uma vez, a resposta é não, e, novamente, realmente tudo se resume a nos poupar o incômodo de escrever mais código para fazer as coisas básicas que expressam vem com ‘built-in’.

Na superfície, o body-parser facilita a obtenção das informações contidas nas solicitações do cliente em vários formatos, em vez de fazer com que você capture os streams de dados brutos e descubra em que formato as informações estão, muito menos analisando manualmente essas informações dados utilizáveis.

Vamos tentar manter isso menos técnico.

Vamos dizer que você está enviando um dado de formulário html para o servidor node-js, ou seja, você fez uma requisição para o servidor. O arquivo do servidor receberia sua solicitação em um object de solicitação. Agora, pela lógica, se você consola o log desse object de requisição no seu arquivo do servidor, você deve ver os dados do seu formulário em algum lugar nele, o qual poderia ser extraído então, mas whoa! você realmente não faz!

Então, onde estão nossos dados? Como vamos extraí-lo se não está presente apenas no meu pedido.

Uma explicação simples para isso é que o http envia os dados do seu formulário em bits e peças, que devem ser montados conforme eles chegam ao seu destino. Então, como você extrairia seus dados?

Mas, por que levar essa dor de cada vez manualmente analisando seus dados para pedaços e montando-os. Use algo chamado “body-parser”, que faria isso por você.

body-parser analisa o seu pedido e o converte em um formato a partir do qual você pode facilmente extrair informações relevantes que você pode precisar.

Por exemplo, digamos que você tenha um formulário de inscrição no frontend. Você está preenchendo e solicitando ao servidor para salvar os detalhes em algum lugar.

A extração de nome de usuário e senha de sua solicitação é tão simples quanto abaixo se você usar o analisador de corpo.

 var loginDetails = { username : request.body.username, password : request.body.password }; 

Então, basicamente, body-parser analisou sua solicitação recebida, reuniu os fragments que continham os dados do formulário, criou esse object de corpo para você e o preencheu com os dados do formulário.