como-manejar-urls-nodejs

Cómo trabajar con URLs con Node.js

En Node.js, el módulo url proporciona utilidades para analizar, construir, modificar y verificar URLs de forma sencilla.

Lo cuál es muy importante, porque muy frecuentemente usaremos Node.js para tareas asociadas con direcciones URL, como servir o descargar un recurso.

Ejemplos de uso del módulo URL

Parseo de una URL

El primer paso para trabajar con una URL es analizarla para extraer sus componentes. El método URL del módulo url nos permite hacer esto de manera sencilla:

import { URL } from 'node:url';

const urlTexto = 'https://www.ejemplo.com/ruta/subruta?param1=valor1&param2=valor2';
const miUrl = new URL(urlTexto);

console.log('Protocolo:', miUrl.protocol);
console.log('Host:', miUrl.host);
console.log('Ruta:', miUrl.pathname);
console.log('Parámetros de búsqueda:', miUrl.searchParams);

Construcción de una URL

También podemos construir una URL a partir de sus componentes utilizando el constructor URL:

import { URL } from 'node:url';

const baseUrl = 'https://www.ejemplo.com';
const ruta = '/ruta/subruta';
const params = new URLSearchParams({
  param1: 'valor1',
  param2: 'valor2'
});

const urlCompleta = new URL(ruta, baseUrl);
urlCompleta.search = params.toString();

console.log('URL Completa:', urlCompleta.href);

Modificación de parámetros de una URL

Podemos manipular los parámetros de una URL de manera dinámica utilizando la clase URLSearchParams:

import { URLSearchParams } from 'node:url';

const url = new URL('https://www.ejemplo.com/?param1=valor1&param2=valor2');

// Obtener parámetros
console.log('Parámetro 1:', url.searchParams.get('param1'));
console.log('Parámetro 2:', url.searchParams.get('param2'));

// Añadir parámetro
url.searchParams.append('param3', 'valor3');
console.log('URL con nuevo parámetro:', url.href);

// Eliminar parámetro
url.searchParams.delete('param2');
console.log('URL sin param2:', url.href);

Resolución de URLs relativas

El módulo url nos permite resolver URLs relativas en el contexto de una URL base:

import { resolve } from 'node:path';

const baseUrl = 'https://www.ejemplo.com/carpeta1/';
const urlRelativa = 'subcarpeta/archivo.html';

const urlResuelta = new URL(urlRelativa, baseUrl);
console.log('URL Resuelta:', urlResuelta.href);

Verificación de la validez de una URL

Finalmente, podemos verificar si una cadena es una URL válida utilizando el constructor URL dentro de un bloque try-catch:

import { URL } from 'node:url';

function esURLValida(url) {
  try {
    new URL(url);
    return true;
  } catch (error) {
    return false;
  }
}

console.log('¿Es válida la URL?', esURLValida('https://www.ejemplo.com')); // true
console.log('¿Es válida la URL?', esURLValida('esto no es una URL')); // false

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github github-full