Módulo url
O módulo url do Node.js fornece utilitários para resolução, parsing e manipulação de URLs. Ele permite dividir um endereço web em partes significativas, construir URLs dinamicamente, manipular parâmetros de query string e validar URLs.
Importação do módulo URL
No Node.js, pode-se importar o módulo URL da maneira tradicional usando:
const url = require('url');
Ou, usando a sintaxe moderna de módulos ES com import (Node.js 14+):
import { URL, URLSearchParams } from 'node:url';
Construção de um objeto URL
Para criar um objeto URL a partir de uma string, usa-se o construtor URL:
const urlobj = new url.URL('https://www.example.com:8080/path/name?param1=value1¶m2=value2#section');
Esse objeto possui várias propriedades úteis que correspondem às partes da URL:
href: URL completaprotocol: protocolo (ex:https:)host: hostname com porta (ex:www.example.com:8080)hostname: hostname (ex:www.example.com)port: porta (ex:8080)pathname: caminho da URL (ex:/path/name)search: query string com interrogação (ex:?param1=value1¶m2=value2)searchParams: objeto para manipular os parâmetros de queryhash: fragmento após#(ex:#section)
Exemplo:
console.log(url.protocol); // https:
console.log(url.host); // www.example.com:8080
console.log(url.pathname); // /path/name
console.log(url.searchParams.get('param1')); // value1
console.log(url.hash); // #section
Manipulação dos parâmetros de consulta (query string)
A propriedade searchParams é uma instância da classe URLSearchParams que permite manipular os parâmetros da query string de forma dinâmica.
Exemplos úteis:
const urlobj = new url.URL('https://www.example.com?foo=bar&baz=qux');
// Ler valor
console.log(urlobj.searchParams.get('foo')); // bar
// Adicionar novo parâmetro
urlobj.searchParams.append('newParam', 'newValue');
console.log(urlobj.href); // https://www.example.com/?foo=bar&baz=qux&newParam=newValue
// Modificar um parâmetro
urlobj.searchParams.set('foo', 'changed');
console.log(urlobj.href); // https://www.example.com/?foo=changed&baz=qux&newParam=newValue
// Remover um parâmetro
urlobj.searchParams.delete('baz');
console.log(urlobj.href); // https://www.example.com/?foo=changed&newParam=newValue
Construção de URLs relativas a uma base
O construtor URL aceita um segundo parâmetro que serve como a base para URLs relativas.
Exemplo:
const base = 'https://example.com/folder/';
const url1 = new URL('file.txt', base);
console.log(url1.href); // https://example.com/folder/file.txt
const url2 = new URL('/otherpath', base);
console.log(url2.href); // https://example.com/otherpath
Validação de URLs
Pode-se verificar se uma string é uma URL válida tentando criar um objeto URL dentro de um bloco try-catch:
function isValidUrl(string) {
try {
new URL(string);
return true;
} catch {
return false;
}
}
console.log(isValidUrl('https://test.com')); // true
console.log(isValidUrl('invalid-url')); // false
Exemplo completo resumido
const { URL } = require('url');
const url = new URL('https://user:pass@example.com:8080/path/name?foo=bar#hash');
console.log('Protocol:', url.protocol);
console.log('Host:', url.host);
console.log('Hostname:', url.hostname);
console.log('Port:', url.port);
console.log('Pathname:', url.pathname);
console.log('Search:', url.search);
console.log('Hash:', url.hash);
console.log('User:', url.username);
console.log('Password:', url.password);
url.searchParams.append('newParam', 'newValue');
console.log('URL com novo parâmetro:', url.href);
