Bom dia amigos!
Apresento a sua atenção a tradução do artigo "Como analisar URL em JavaScript: hostname, pathname, query, hash" de Dmitri Pavlutin.
O Uniform Resource Locator ou URL para abreviar é um link para um recurso da web (página da web, imagem, arquivo). A URL define a localização do recurso e como ele é recebido - protocolo (http, ftp, mailto).
Por exemplo, este é o URL deste artigo:
https://dmitripavlutin.com/parse-url-javascript
Freqüentemente, é necessário recuperar certos elementos de um URL. Pode ser um nome de host (hostname,
dmitripavlutin.com
) ou um caminho (pathname, /parse-url-javascript
).
Uma maneira conveniente de obter os componentes individuais de um URL é com o construtor
URL()
.
Neste artigo, falaremos sobre a estrutura e os principais componentes de um URL.
1. Estrutura de URL
Uma imagem vale mais que mil palavras. Na imagem acima, você pode ver os principais componentes do URL:
2. Construtor de URL ()
Um construtor
URL()
é uma função que permite analisar (analisar) componentes de URL:
const url = new URL(relativeOrAbsolute [, absoluteBase])
O argumento
relativeOrAbsolute
pode ser um URL absoluto ou relativo. Se o primeiro argumento for um link relativo, o segundo argumento ,, absoluteBase
será obrigatório e será a URL absoluta que é a base para o primeiro argumento.
Por exemplo, inicialize
URL()
com um URL absoluto:
const url = new URL('http://example.com/path/index.html')
url.href // 'http://example.com/path/index.html'
Agora vamos combinar os URLs relativos e absolutos:
const url = new URL('/path/index.html', 'http://example.com')
url.href // 'http://example.com/path/index.html'
A propriedade da
href
instância URL()
retorna a string de URL passada.
Depois de criar uma instância
URL()
, você pode acessar os componentes do URL. Para referência, aqui está a interface da instância URL()
:
interface URL {
href: USVString;
protocol: USVString;
username: USVString;
password: USVString;
host: USVString;
hostname: USVString;
port: USVString;
pathname: USVString;
search: USVString;
hash: USVString;
readonly origin: USVString;
readonly searchParams: URLSearchParams;
toJSON(): USVString;
}
Aqui, o tipo
USVString
significa que o JavaScript deve retornar uma string.
3. String de consulta
A propriedade
url.search
permite que você obtenha uma string de consulta de URL começando com um prefixo ?
:
const url = new URL(
'http://example.com/path/index.html?message=hello&who=world'
)
url.search // '?message=hello&who=world'
Se não houver string de consulta, ele
url.search
retornará uma string vazia (''):
const url1 = new URL('http://example.com/path/index.html')
const url2 = new URL('http://example.com/path/index.html?')
url1.search // ''
url2.search // ''
3.1. Analisando (analisando) uma string de consulta
Em vez de obter a string de consulta original, podemos obter seus parâmetros.
Uma maneira fácil de fazer isso é fornecida pela propriedade
url.searchParams
. O valor desta propriedade é uma instância da interface URLSeachParams.
O objeto
URLSearchParams
fornece muitos métodos para trabalhar com parâmetros de string de consulta ( get(param), has(param)
e assim por diante).
Vamos dar um exemplo:
const url = new Url(
'http://example.com/path/index.html?message=hello&who=world'
)
url.searchParams.get('message') // 'hello'
url.searchParams.get('missing') // null
url.searchParams.get('message')
retorna o valor do parâmetro da message
string de consulta.
Acessar um parâmetro inexistente
url.searchParams.get('missing')
retorna null
.
4. Nome do host (nome do host)
O valor da propriedade
url.hostname
é o nome do host do URL:
const url = new URL('http://example.com/path/index.html')
url.hostname // 'example.com'
5. Caminho (nome do caminho)
A propriedade
url.pathname
contém o caminho do URL:
const url = new URL('http://example.com/path/index.html?param=value')
url.pathname // '/path/index.html'
Se o URL não tiver caminho, ele
url.pathname
retornará o caractere /
:
const url = new URL('http://example.com/');
url.pathname; // '/'
6. Hash
Por fim, o hash pode ser obtido por meio de uma propriedade
url.hash
:
const url = new URL('http://example.com/path/index.html#bottom')
url.hash // '#bottom'
Se não houver hash, ele
url.hash
retorna uma string vazia (''):
const url = new URL('http://example.com/path/index.html')
url.hash // ''
7. Verificando (validando) URL
Chamar o construtor
new URL()
não apenas cria uma instância, mas também valida a URL passada. Se o URL não for válido, ele é jogado fora TypeError
.
Por exemplo,
http ://example.com
não é um URL válido porque http
há um espaço depois .
Vamos tentar usar este URL:
try {
const url = new URL('http ://example.com')
} catch (error) {
error // TypeError, "Failed to construct URL: Invalid URL"
}
Como o
'http ://example.com'
url errado está sendo new URL('http ://example.com')
exibido conforme o esperado TypeError
.
8. Trabalhando com URL
Propriedades como
search, hostname, pathname, hash
são graváveis.
Por exemplo, vamos alterar o nome do host de um URL existente de
red.com
para blue.io
:
const url = new URL('http://red.com/path/index.html')
url.href // 'http://red.com/path/index.html'
url.hostname = 'blue.io'
url.href // 'http://blue.io/path/index.html'
As propriedades
origin, searchParams
são somente leitura.
9. Conclusão
Um construtor
URL()
é uma maneira muito conveniente de analisar (analisar) e validar um URL em JavaScript.
new URL(relativeOrAbsolute, [, absoluteBase]
usa um URL absoluto ou relativo como o primeiro parâmetro. Se o primeiro parâmetro for um URL relativo, o segundo parâmetro deve ser um URL absoluto - a base para o primeiro argumento.
Uma vez instanciado
URL()
, você pode acessar os principais componentes do URL:
url.search
- string de consulta originalurl.searchParams
- uma instânciaURLSearchParams
para obter parâmetros de string de consultaurl.hostname
- nome de anfitriãourl.pathname
- caminhourl.hash
- valor hash