Obtenga HTTP POST Body en Express.js

    Introducci贸n

    En este breve art铆culo, veremos c贸mo extraer informaci贸n de un cuerpo POST en Express.js. El protocolo HTTP proporciona varias formas de pasar informaci贸n de un cliente a un servidor, siendo los cuerpos POST el m茅todo m谩s flexible y m谩s utilizado para enviar datos a trav茅s de HTTP.

    Otra forma, que normalmente se utiliza para diferentes casos de uso, es transmitir informaci贸n mediante cadenas de consulta o par谩metros de URL. Para obtener m谩s informaci贸n, consulte c贸mo obtener cadenas de consulta y par谩metros en Express.js.

    Para este art铆culo, supongo que tiene algo de experiencia con Node.js y la creaci贸n de Express.js servidores.

    Env铆o de datos POST en HTTP

    Los datos se pueden enviar a trav茅s de una llamada HTTP POST por muchas razones, siendo algunas de las m谩s comunes a trav茅s de HTML <form> o una solicitud de API. Los datos pueden adoptar diferentes formas, siendo las m谩s comunes:

    • application/x-www-form-urlencoded: Los datos de esta codificaci贸n tienen el formato de una cadena de consulta que ver铆a en una URL, con el valor-clave paris separado por & caracteres. Por ejemplo: foo=bar&abc=123&stack=abuse. 脡sta es la codificaci贸n predeterminada.
    • multipart/form-data: Esta codificaci贸n se utiliza normalmente para enviar archivos. En resumen, cada clave-valor se env铆a en la misma solicitud, pero diferentes “partes”, que est谩n separadas por “l铆mites” e incluyen m谩s metadatos.
    • text/plain: Estos datos solo se env铆an como texto sin formato no estructurado y, por lo general, no se utilizan.

    Una solicitud HTTP POST sin procesar con el application/x-www-form-urlencoded la codificaci贸n podr铆a verse as铆:

    POST /signup HTTP/1.1
    Host: example.com
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 53
    
    username=scott&password=secret&website=Pharos.sh.com
    

    Extracci贸n de datos POST

    Antes de que podamos comenzar a acceder a los datos POST de inmediato, debemos configurar correctamente nuestra aplicaci贸n Express. Esta configuraci贸n debe realizarse ya que no todos los servidores de aplicaciones web necesitan an谩lisis corporal, y qu茅 an谩lisis corporal est谩 habilitado depende de su aplicaci贸n.

    Para configurar esto, usaremos el analizador corporal paquete, que puede manejar muchas formas de datos. Este paquete es un middleware que intercepta el cuerpo sin procesar y lo analiza en una forma que el c贸digo de su aplicaci贸n puede usar f谩cilmente.

    // index.js
    const express = require('express');
    const bodyParser = require('body-parser');
    
    const app = express();
    app.use(bodyParser.urlencoded({ extended: true }));
    
    app.post('/post-test', (req, res) => {
        console.log('Got body:', req.body);
        res.sendStatus(200);
    });
    
    app.listen(8080, () => console.log(`Started server at http://localhost:8080!`));
    

    Note como llamamos app.use(...) antes de definir nuestra ruta. El orden aqu铆 importa. Esto asegurar谩 que el body-parser se ejecutar谩 antes que nuestra ruta, lo que garantiza que nuestra ruta pueda acceder al cuerpo HTTP POST analizado.

    Para probar esto, primero iniciaremos la aplicaci贸n Express y luego usaremos el curl utilidad en una ventana de consola diferente:

    $ curl -d "username=scott&password=secret&website=Pharos.sh.com" -X POST http://localhost:8080/post-test
    OK
    
    $ node index.js
    Started server at http://localhost:8080!
    Got body: { username: 'scott',
      password: 'secret',
      website: 'Pharos.sh.com' }
    

    Aqu铆 puede ver que los datos de la cadena de consulta se analizaron en un objeto JavaScript al que podemos acceder f谩cilmente.

    Otra cosa importante a tener en cuenta es nuestro uso de la extended opci贸n al llamar bodyParser.urlencoded. Utilizando el extended la opci贸n dice body-parser usar el qs biblioteca para analizar los datos codificados en URL. Esto permite que cosas como objetos y matrices se codifiquen en el formato codificado para URL.

    Y mientras urlencoded es uno de los analizadores m谩s utilizados que body-parser proporciona, tambi茅n puede utilizar lo siguiente:

    • .json(): Analiza el texto con formato JSON para los cuerpos con un Content-Type de application/json.
    • .raw(): Analiza el cuerpo HTTP en un Buffer para la costumbre especificada Content-Types, aunque se acepta el valor predeterminado Content-Type es application/octet-stream.
    • .text(): Analiza los cuerpos HTTP con un Content-Type de text/plain, que lo devuelve como una cadena simple.

    Cada uno de estos analizadores tambi茅n admite la inflaci贸n autom谩tica de datos codificados con gzip o desinflar, por lo que la compresi贸n a煤n se puede usar de forma transparente sin ning煤n trabajo adicional por parte del c贸digo de su aplicaci贸n.

    Lo mejor del modelo de middleware y de c贸mo este paquete analiza los datos es que no est谩 obligado a utilizar un solo analizador. Puede habilitar uno o m谩s analizadores para su aplicaci贸n para asegurarse de que todos los tipos de datos se procesen correctamente:

    // index.js
    const express = require('express');
    const bodyParser = require('body-parser');
    
    const app = express();
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    app.use(bodyParser.raw());
    
    // ...
    

    Entonces, si tuvi茅ramos que enviar una solicitud HTTP POST con JSON como cuerpo, se analizar谩 en un objeto JSON normal en el req.body propiedad:

    POST /post-test HTTP/1.1
    Host: localhost:8080
    Content-Type: application/json
    Content-Length: 69
    
    '{"username":"scott","password":"secret","website":"Pharos.sh.com"}'
    
    $ node index.js
    Started server at http://localhost:8080!
    Got body: { username: 'scott',
      password: 'secret',
      website: 'Pharos.sh.com' }
    

    Conclusi贸n

    La forma m谩s com煤n de enviar grandes y diversas cantidades de datos a trav茅s de HTTP es utilizar el m茅todo POST. Antes de que podamos acceder f谩cilmente a estos datos en el lado del servidor en Express, necesitamos usar alg煤n middleware, como el body-parser paquete, para analizar los datos en un formato al que podamos acceder f谩cilmente. Una vez que se analizan los datos de la solicitud HTTP sin procesar, se puede acceder a ellos a trav茅s del body propiedad de la req objeto.

    En este art铆culo explicamos un poco sobre los distintos tipos de contenido / codificaciones, c贸mo usar el body-parser paquete y sus diversas opciones, y c贸mo acceder a los datos analizados. Si ve alg煤n problema o tiene sugerencias, no dude en dejar un comentario a continuaci贸n.

    .

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *