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

O

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.

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad