Obtener cadenas de consulta y parámetros en Express.js

    Introducción

    Veremos cómo extraer información de una URL en Express.js. Específicamente, ¿cómo extraemos información de una cadena de consulta y cómo extraemos información de los parámetros de ruta de URL?

    En este artículo, supongo que tienes algo de experiencia con Node.js y creando Express.js servidores (o al menos simples). El resto lo explicaremos a lo largo del artículo.

    Extraer parámetros de consulta

    Antes de comenzar, sería útil comprender primero qué es exactamente una cadena de consulta / parámetro, y luego hablaremos sobre cómo podemos trabajar con ellos.

    Entonces, que es un parámetro de consulta?

    En términos simples, una cadena de consulta es parte de una URL (Localizador uniforme de recursos) después del signo de interrogación (?). Está destinado a enviar pequeñas cantidades de información al servidor a través de la URL. Esta información se usa generalmente como parámetros para consultar una base de datos, o tal vez para filtrar resultados. Realmente depende de usted para qué se usan.

    A continuación, se muestra un ejemplo de una URL con cadenas de consulta adjuntas:

    https://Pharos.sh.com/?page=2&limit=3
    

    Los parámetros de consulta son los pares clave-valor reales como page y limit con valores de 2 y 3, respectivamente.

    Ahora, pasemos al primer propósito principal de este artículo: cómo extraerlos de nuestro objeto de solicitud Express.

    Este es un caso de uso bastante común en Express y en cualquier servidor HTTP, así que espero que los ejemplos y la explicación que muestro aquí sean claros.

    Ahora, tomando el mismo ejemplo de arriba:

    https://Pharos.sh.com/?page=2&limit=3
    

    Nos gustaría extraer tanto el page y limit parámetros para que sepamos qué artículos volver a la página que solicitó el usuario. Si bien los parámetros de consulta se utilizan normalmente en GET solicitudes, todavía es posible verlas en POST y DELETE solicitudes, entre otras.

    Sus parámetros de consulta se pueden recuperar de la query objeto en el solicitud objeto enviado a su ruta. Tiene la forma de un objeto en el que puede acceder directamente a los parámetros de consulta que le interesan. En este caso, Express maneja todo el análisis de URL por usted y expone los parámetros recuperados como este objeto.

    Echemos un vistazo a un ejemplo de cómo obtenemos parámetros de consulta en una ruta:

    const express = require('express');
    const bodyParser = require('body-parser');
    const url = require('url');
    const querystring = require('querystring');
    const Article = require('./models').Article;
    
    let app = express();
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(bodyParser.json());
    
    // Function to handle the root path
    app.get("https://Pharos.sh.com/", async function(req, res) {
    
        // Access the provided 'page' and 'limt' query parameters
        let page = req.query.page;
        let limit = req.query.limit;
    
        let articles = await Article.findAll().paginate({page: page, limit: limit}).exec();
    
        // Return the articles to the rendering engine
        res.render('index', {
            articles: articles
        });
    });
    
    let server = app.listen(8080, function() {
        console.log('Server is listening on port 8080')
    });
    

    En el ejemplo anterior, asumimos que page y limit los parámetros siempre existen. Si ninguno de estos parámetros se proporciona en la URL, recibiríamos undefined para ambos page y limit en lugar.

    Extraer parámetros de consulta sin Express

    Como beneficio adicional, quería mostrarle cómo realizar el análisis real por su cuenta en caso de que necesite extraer información de una URL que no esté usando Express o cualquier otro marco web. Es bastante común crear un servidor completamente simple usando el http módulo, por lo que es bueno saberlo.

    Por suerte para usted, Node.js ya proporciona algunas bibliotecas centrales excelentes que tienen esta funcionalidad incorporada, por lo que es solo una cuestión de require-ingresar el módulo y llamar a algunas líneas de código.

    Aquí hay un ejemplo usando el querystring y url paquetes.

    const url = require('url');
    const querystring = require('querystring');
    
    let rawUrl="https://Pharos.sh.com/?page=2&limit=3";
    
    let parsedUrl = url.parse(rawUrl);
    let parsedQs = querystring.parse(parsedUrl.query);
    
    // parsedQs = { page: '2', limit: '3' }
    

    Puede ver en este código que necesitamos dos pasos de análisis para obtener los resultados que queremos.

    Analicemos esto un poco más y mostremos qué sucede exactamente en cada paso. Después de llamar url.parse(rawUrl) en nuestra URL, esto es lo que se nos devuelve:

    {
        protocol: 'https:',
        slashes: true,
        auth: null,
        host: 'Pharos.sh.com',
        port: null,
        hostname: 'Pharos.sh.com',
        hash: null,
        search: '?page=2&limit=3',
        query: 'page=2&limit=3',
        pathname: "https://Pharos.sh.com/",
        path: '/?page=2&limit=3',
        href: 'https://Pharos.sh.com/?page=2&limit=3'
    }
    

    De acuerdo, estamos un poco más cerca de obtener los datos que necesitamos. Pero hay que desglosarlo una vez más. Podemos hacer esto usando el querystring paquete para analizar la cadena de consulta real. Por ejemplo:

    let parsedQs = querystring.parse(parsedUrl.query);
    

    Y finalmente, nuestro parsedQs objeto contiene lo siguiente:

    {
        page: '2',
        limit: '3'
    }
    

    Extracción de parámetros de ruta

    En cualquier aplicación web, otra forma común de estructurar sus URL es colocar información dentro de la ruta URL real, que simplemente se denominan parámetros de ruta en Express. Podemos usarlos para estructurar páginas web por información / datos, que son especialmente útiles en las API REST.

    La extracción de estos parámetros de ruta es similar a los parámetros de consulta. Todo lo que hacemos es tomar el req objeto y recuperar nuestros parámetros de la params objeto. Bastante simple, ¿verdad?

    Echemos un vistazo a un ejemplo de cómo hacer esto en nuestra ruta Express:

    // Route to return all articles with a given tag
    app.get('/tag/:id', async function(req, res) {
        
        // Retrieve the tag from our URL path
        var id = req.params.id;
    
        let articles = await Article.findAll({tag: id}).exec();
    
        res.render('tag', {
            articles: articles
        });
    });
    

    Lo primero que debe notar es que le decimos a Express que nuestra ruta es /tag/:id, dónde :id es un marcador de posición para cualquier cosa. Podría ser una cadena o un número. Entonces, cualquier cosa que se pase en esa parte de la ruta se establece como id parámetro.

    Si tuviéramos que navegar a la URL https://Pharos.sh.com/tag/node luego id sería node, y obtendríamos un montón de artículos que tienen la node etiqueta en ellos. Y req.params en este caso sería {id: 'node'}, al igual que el query objeto.

    Como puede ver, nuevamente tomamos nuestro parámetro directamente de un objeto contenido dentro del objeto de solicitud.

    Conclusión

    En este artículo presenté formas de extraer tanto los parámetros de la cadena de consulta como los parámetros de ruta de ruta de una URL en el marco web Express. Aquí hay un resumen rápido de cómo extraer los parámetros de los que hablamos:

    • req.query: accede directamente a los parámetros de la cadena de consulta analizados
    • req.params: accede directamente a los parámetros de ruta analizados desde la ruta

    Si bien el acto real de recuperar estos datos es muy simple, comprender de dónde proviene esta información y qué es puede ser confuso para algunos principiantes. Esperamos que este artículo te aclare algunas cosas. No dude en informarnos en los comentarios si hay algo que no esté claro.

    Etiquetas:

    Deja una respuesta

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