¡Buen dia amigos!
Presento a su atención la traducción del artículo "Cómo analizar URL en JavaScript: nombre de host, nombre de ruta, consulta, hash" de Dmitri Pavlutin.
El localizador uniforme de recursos o URL para abreviar es un enlace a un recurso web (página web, imagen, archivo). La URL define la ubicación del recurso y cómo se recibe: el protocolo (http, ftp, mailto).
Por ejemplo, aquí está la URL de este artículo:
https://dmitripavlutin.com/parse-url-javascript
A menudo es necesario recuperar ciertos elementos de una URL. Puede ser un nombre de host (nombre de host
dmitripavlutin.com
) o un nombre de ruta (nombre de ruta /parse-url-javascript
).
Una forma conveniente de obtener los componentes individuales de una URL es con el constructor
URL()
.
En este artículo, hablaremos sobre la estructura y los componentes principales de una URL.
1. Estructura de la URL
Una imagen vale mas que mil palabras. En la imagen de arriba, puede ver los componentes principales de la URL:
2. Constructor de URL ()
Un constructor
URL()
es una función que le permite analizar (analizar) componentes de URL:
const url = new URL(relativeOrAbsolute [, absoluteBase])
El argumento
relativeOrAbsolute
puede ser una URL absoluta o relativa. Si el primer argumento es un enlace relativo, entonces absoluteBase
se requiere el segundo argumento ,, y es la URL absoluta que es la base del primer argumento.
Por ejemplo, inicialicemos
URL()
con una URL absoluta:
const url = new URL('http://example.com/path/index.html')
url.href // 'http://example.com/path/index.html'
Ahora combinemos las URL relativas y absolutas:
const url = new URL('/path/index.html', 'http://example.com')
url.href // 'http://example.com/path/index.html'
La propiedad de la
href
instancia URL()
devuelve la cadena de URL pasada.
Después de crear una instancia
URL()
, puede acceder a los componentes de la URL. Como referencia, aquí está la interfaz de la instancia 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;
}
Aquí, tipo
USVString
significa que JavaScript debe devolver una cadena.
3. Cadena de consulta
La propiedad le
url.search
permite obtener una cadena de consulta de URL que comience con un prefijo ?
:
const url = new URL(
'http://example.com/path/index.html?message=hello&who=world'
)
url.search // '?message=hello&who=world'
Si no hay una cadena de consulta,
url.search
devuelve una cadena vacía (''):
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. Analizar (analizar) una cadena de consulta
En lugar de obtener la cadena de consulta original, podemos obtener sus parámetros.
La propiedad proporciona una manera fácil de hacer esto
url.searchParams
. El valor de esta propiedad es una instancia de la interfaz URLSeachParams.
El objeto
URLSearchParams
proporciona muchos métodos para trabajar con parámetros de cadenas de consulta ( get(param), has(param)
y así sucesivamente).
Tomemos un ejemplo:
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')
devuelve el valor del parámetro de message
cadena de consulta.
Se
url.searchParams.get('missing')
vuelve a acceder a un parámetro inexistente null
.
4. Nombre de host (nombre de host)
El valor de la propiedad
url.hostname
es el nombre de host de la URL:
const url = new URL('http://example.com/path/index.html')
url.hostname // 'example.com'
5. Ruta (nombre de ruta)
La propiedad
url.pathname
contiene la ruta URL:
const url = new URL('http://example.com/path/index.html?param=value')
url.pathname // '/path/index.html'
Si la URL no tiene ruta,
url.pathname
devuelve el carácter /
:
const url = new URL('http://example.com/');
url.pathname; // '/'
6. Hash
Finalmente, el hash se puede obtener a través de una propiedad
url.hash
:
const url = new URL('http://example.com/path/index.html#bottom')
url.hash // '#bottom'
Si no hay hash,
url.hash
devuelve una cadena vacía (''):
const url = new URL('http://example.com/path/index.html')
url.hash // ''
7. Comprobando (validando) la URL
Llamar al constructor
new URL()
no solo crea una instancia, sino que también valida la URL pasada. Si la URL no es válida, se desecha TypeError
.
Por ejemplo,
http ://example.com
no es una URL válida porque http
hay un espacio después .
Intentemos usar esta URL:
try {
const url = new URL('http ://example.com')
} catch (error) {
error // TypeError, "Failed to construct URL: Invalid URL"
}
Como la
'http ://example.com'
URL incorrecta se new URL('http ://example.com')
arroja como se esperaba TypeError
.
8. Trabajar con URL
Propiedades como las que se
search, hostname, pathname, hash
pueden escribir.
Por ejemplo, cambiemos el nombre de host de una URL existente de
red.com
a 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'
Las propiedades
origin, searchParams
son de solo lectura.
9. Conclusión
Un constructor
URL()
es una forma muy conveniente de analizar (analizar) y validar una URL en JavaScript.
new URL(relativeOrAbsolute, [, absoluteBase]
toma una URL absoluta o relativa como primer parámetro. Si el primer parámetro es una URL relativa, el segundo parámetro debe ser una URL absoluta, la base del primer argumento.
Una vez instanciada
URL()
, puede acceder a los componentes principales de la URL:
url.search
- cadena de consulta originalurl.searchParams
- una instanciaURLSearchParams
para obtener parámetros de cadena de consultaurl.hostname
- nombre de hosturl.pathname
- caminourl.hash
- valor hash