node.js - node - ¿Qué hace body-parser con express?
instalar bodyparser node js (8)
Analiza el cuerpo de la solicitud HTTP. Esto generalmente es necesario cuando necesita saber más que solo la URL que ingresó, en particular en el contexto de una solicitud HTTP POST o PUT PATCH donde la información que desea está contenida en el cuerpo.
Básicamente es un middleware para analizar JSON, texto sin formato o simplemente devolver un objeto Buffer sin procesar para que lo maneje según lo requiera.
No entiendo por qué necesitamos
body-parser
en una aplicación Express, ya que podemos obtener datos sin usar
body-parser
.
¿Y qué hace realmente y cómo?
Intentemos mantener esto menos técnico.
Supongamos que está enviando datos de un formulario html al servidor node-js, es decir, realizó una solicitud al servidor. El archivo del servidor recibiría su solicitud bajo un objeto de solicitud. Ahora, por lógica, si la consola registra este objeto de solicitud en el archivo de su servidor, debería ver los datos de su formulario en algún lugar, que podrían extraerse entonces, ¡pero vaya! en realidad no lo haces!
Entonces, ¿dónde están nuestros datos? ¿Cómo lo extraeremos si no solo está presente en mi solicitud?
Una explicación simple de esto es que http envía los datos de su formulario en bits y piezas que se pretenden ensamblar cuando lleguen a su destino. Entonces, ¿cómo extraerías tus datos?
Pero, ¿por qué tomar esta molestia de analizar cada vez manualmente sus datos para trozos y ensamblarlos? Use algo llamado "analizador de cuerpo" que haría esto por usted.
body-parser analiza su solicitud y la convierte a un formato desde el cual puede extraer fácilmente la información relevante que pueda necesitar.
Por ejemplo, supongamos que tiene un formulario de registro en su interfaz. Lo está completando y solicita al servidor que guarde los detalles en alguna parte.
Extraer el nombre de usuario y la contraseña de su solicitud es tan simple como a continuación si usa body-parser.
var loginDetails = {
username : request.body.username,
password : request.body.password
};
Entonces, básicamente, body-parser analizó su solicitud entrante, reunió los fragmentos que contienen los datos de su formulario, luego creó este objeto de cuerpo para usted y lo completó con sus datos de formulario.
La respuesta here explica muy detallada y brillantemente, la respuesta contiene:
En breve; body-parser extrae la parte completa del cuerpo de una secuencia de solicitud entrante y la expone en
req.body
como algo más fácil de interactuar. No lo necesitas per se, porque puedes hacer todo eso tú mismo. Sin embargo, lo más probable es que haga lo que quiera y le ahorrará el problema.Para ir un poco más en profundidad; body-parser le proporciona un middleware que utiliza nodejs/zlib para descomprimir los datos de la solicitud entrante si está comprimido y stream-utils/raw-body para esperar el contenido completo y sin procesar del cuerpo de la solicitud antes de "analizarlo" (esto significa que si no ibas a usar el cuerpo de la solicitud, solo perdiste algo de tiempo).
Después de tener el contenido en bruto, body-parser lo analizará utilizando una de las cuatro estrategias, dependiendo del middleware específico que haya decidido utilizar:
bodyParser.raw() : en realidad no analiza el cuerpo, sino que solo expone el contenido almacenado anteriormente de un Buffer en
req.body
.bodyParser.text() : lee el búfer como texto sin formato y expone la cadena resultante en req.body.
bodyParser.urlencoded() : analiza el texto como datos codificados en URL (que es cómo los navegadores tienden a enviar datos de formularios desde formularios regulares establecidos en POST) y expone el objeto resultante (que contiene las claves y los valores) en
req.body
. Para comparacion; en PHP todo esto se hace automáticamente y se expone en$_POST
.bodyParser.json() : analiza el texto como JSON y expone el objeto resultante en
req.body
.Solo después de configurar
req.body
con los contenidos deseables, llamará al siguiente middleware en la pila, que luego puede acceder a los datos de la solicitud sin tener que pensar en cómo descomprimirlo y analizarlo.
Puede consultar body-parser https://github.com/expressjs/body-parser para leer su documentación, contiene información sobre su funcionamiento.
Para manejar
HTTP POST
en
Express.js
versión 4 y superior, necesita instalar un módulo de middleware llamado
body-parser
.
body-parser
extrae la parte completa del cuerpo de una secuencia de solicitud entrante y la expone en
req.body
.
El middleware era parte de Express.js anteriormente, pero ahora debe instalarlo por separado.
Este módulo del
body-parser
analiza los datos codificados JSON, el búfer, la cadena y la URL enviados mediante
HTTP POST
.
Instale
body-parser
con NPM como se muestra a continuación.
npm install body-parser --save
editar en 2019-abril-2: en [email protected] el middleware body-parser incluido con express. para más detalles ver esto
Para obtener acceso a los datos de la publicación, tenemos que usar
body-parser
.
Básicamente, qué es el
body-parser
que permite que express lea el cuerpo y luego lo
Json
en un objeto
Json
que podamos entender.
Sí, podemos trabajar sin
body-parser
.
Cuando no usa eso, obtiene la solicitud sin procesar, y su cuerpo y encabezados no están en el objeto raíz del parámetro de solicitud.
Deberá manipular individualmente todos los campos.
O puede usar
body-parser
, ya que el equipo express lo mantiene.
Lo que body-parser puede hacer por usted: simplifica la solicitud.
Cómo usarlo: Aquí hay un ejemplo:
Instalar
npm install body-parser --save
Así es como se usa el analizador corporal en 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 }));
Enlazar.
https://github.com/expressjs/body-parser .
Y luego puede obtener el cuerpo y los encabezados en el objeto de solicitud raíz. Ejemplo
app.post("/posturl",function(req,res,next){
console.log(req.body);
res.send("response");
})
Todo esto es una cuestión de conveniencia.
Básicamente, si la pregunta fuera ''¿
Necesitamos
usar
body-parser
?''
La respuesta es no''.
Podemos obtener la misma información del cliente después de la solicitud utilizando una ruta más tortuosa que generalmente será menos flexible y aumentará la cantidad de código que tenemos que escribir para obtener la misma información.
Esto es lo mismo que preguntar ''¿
Necesitamos
usar
express
para comenzar?''
Una vez más, la respuesta es no, y de nuevo, todo se reduce a ahorrarnos la molestia de escribir más código para hacer las cosas básicas que express viene con ''incorporado''.
En la superficie:
body-parser
hace que sea más fácil obtener la información contenida en las solicitudes de los clientes en una variedad de formatos en lugar de hacer que capture los flujos de datos sin procesar y descifrar en qué formato está la información, mucho menos analizar manualmente esa información en datos utilizables
Entendimiento del cuerpo de solicitudes
Al recibir una solicitud POST o PUT, el cuerpo de la solicitud puede ser importante para su aplicación. Obtener los datos del cuerpo es un poco más complicado que acceder a los encabezados de solicitud. El objeto de solicitud que se pasa a un controlador implementa la interfaz ReadableStream. Esta transmisión se puede escuchar o canalizar en otro lugar como cualquier otra transmisión. Podemos tomar los datos directamente de la transmisión al escuchar los eventos de ''datos'' y ''finalización'' de la transmisión.
El fragmento emitido en cada evento de ''datos'' es un Buffer. Si sabe que serán datos de cadena, lo mejor que puede hacer es recopilar los datos en una matriz, luego, al ''final'', concatenarlos y clasificarlos en cadena.
let body = []; request.on(''data'', (chunk) => { body.push(chunk); }).on(''end'', () => { body = Buffer.concat(body).toString(); // at this point, `body` has the entire request body stored in it as a string });
Comprender el analizador corporal
Según su documentación
Analice los cuerpos de solicitud entrantes en un middleware antes de sus manejadores, disponibles bajo la propiedad req.body.
Como viste en el primer ejemplo, tuvimos que analizar la secuencia de solicitud entrante manualmente para extraer el cuerpo. Esto se vuelve un poco tedioso cuando hay múltiples datos de formularios de diferentes tipos. Entonces, utilizamos el paquete body-parser que realiza toda esta tarea bajo el capó.
Proporciona cuatro módulos para analizar diferentes tipos de datos.
Después de tener el analizador de cuerpo sin procesar, usará una de las estrategias anteriores (dependiendo del middleware que haya decidido usar) para analizar los datos. Puede leer más sobre ellos leyendo su documentación.
Después de configurar el
req.body
en el cuerpo analizado, body-parser invocará
next()
para llamar al siguiente middleware en la pila, que luego puede acceder a los datos de la solicitud sin tener que pensar en cómo descomprimirlo y analizarlo.