Analizar cadena de consulta en JavaScript

Tahseen Tauseef 12 octubre 2023
  1. Hipervínculo ficticio
  2. Sintaxis de parseQuery
Analizar cadena de consulta en JavaScript

En este tutorial, observamos cómo funcionan las cadenas de consulta de análisis en JavaScript, pero antes de continuar, revisemos el historial y veamos por qué necesitamos estas cadenas de consulta en primer lugar.

Una cadena de consulta es una parte de un hipervínculo o URL que aparece justo después del signo de interrogación ? establece valores para variables conocidas como claves o parámetros, algo similar a un diccionario de python. Envía datos de una página web a otra junto con la recuperación de datos específicos de la base de datos o del servidor web.

Hipervínculo ficticio

www.mysite
    .com  // default.aspx?username=user+1&units=kgs&units=pounds&permission=false

En el hipervínculo anterior, esta parte se refiere a la consulta:

username = user + 1 & units = kgs& units = pounds& permission = false

Dicho esto, analizar significa extraer una parte de algo, y aquí estamos hablando de una cadena de consulta, lo que significa que este proceso tomará una parte de nuestra cadena de consulta y trabajará con ella. Esa cadena de consulta analizada juega un papel importante en la referencia o recuperación de solicitudes de datos.

Así es como se vería una consulta analizada:

username = user 1

Ahora veamos un ejemplo más tangible que muestra cómo JavaScript analiza la cadena de consulta del hipervínculo dado pasando por múltiples casos de prueba; En este ejemplo, nuestra función parseQuery toma el hipervínculo como argumento y escupe la consulta analizada en forma de objeto JavaScript.

Sintaxis de parseQuery

parseQuery(query)
  • consulta: la cadena específica que se pasa como consulta.
function parseQuery(query) {
  object = {};

  if (query.indexOf('?') != -1) {
    query = query.split('?');
    query = query[1];
  }

  parseQuery = query.split('&');

  for (var i = 0; i < parseQuery.length; i++) {
    pair = parseQuery[i].split('=');
    key = decodeURIComponent(pair[0]);
    if (key.length == 0) continue;
    value = decodeURIComponent(pair[1].replace('+', ' '));

    if (object[key] == undefined)
      object[key] = value;
    else if (object[key] instanceof Array)
      object[key].push(value);
    else
      object[key] = [object[key], value];
  }

  return object;
};

Comencemos creando un objeto vacío, luego nuestra consulta o hipervínculo se rompe desde ? para deshacerse del exceso de URL.

Una vez hecho esto, dividimos nuestra consulta de & para obtener lo que se conoce como el atributo y su valor en forma de una lista que se itera para extraer el valor y el atributo individualmente.

Ahora, el par clave-valor verificará algunos de los casos de prueba y, finalmente, del valor restante, reemplazamos cualquier signo + con un espacio que nos brinde un valor más legible.

Repasemos nuestros casos de prueba:

Caso 1

parseQuery('username=Eren&units=kgs&permission=true');

En este caso, pasamos una consulta en lugar de una URL username=Eren&units=kgs&permission=true lo que sucederá es que se saltará el primer bloque if, y dado que hay más de un par de clave y valor, la consulta se divide , y se verifica que esta línea de código sea verdadera ya que no tenemos claves duplicadas.

if (object[key] == undefined) object[key] = value;

Producción :

{ 
    username: 'Eren', 
    units: 'kgs', 
    permission: 'true' 
}

Caso 2

parseQuery(
    'http:/www.mysite.com//default.txt?username=David+Rogers&units=kgs&permission=false');

Ahora usamos el hipervínculo completo

http: /www.mysite.com/ / default.txt ? username = David + Rogers& units =
                                                      kgs& permission = false

como argumento y la condición if dada a continuación se vuelve True y este bloque extraerá la consulta de nuestro hipervínculo

if (query.indexOf('?') != -1) {

Producción :

{ 
    username: 'David Rogers', 
    units: 'kgs', 
    permission: 'false' 
}

Caso 3

parseQuery(
    'http:/www.mysite.com//default.txt?username=user1&insect=%D0%B1%D0%B0%D0%B1%D0%BE%D1%87%D0%BA%D0%B0');

Intentemos dar una URL que contenga un mensaje codificado.

http: /www.mysite.com/ / default.txt ? username = user1& insect = % D0 % B1 %
    D0 % B0 % D0 % B1 % D0 % BE % D1 % 87 % D0 % BA % D0 % B0

Hemos utilizado la función decodeURIComponent() para decodificar este mensaje.

Producción :

{ 
    username: 'user 1', 
    insect: 'бабочка' 
}

Caso 4

parseQuery(
    'http:/www.mysite.com//default.txt?username=Eren&units=kgs&permission=false&units=pounds');

Finalmente, consideramos un hipervínculo que contiene claves duplicadas

http: /www.mysite.com/ / default.txt ?
    username = Eren& units = kgs& permission = false& units = pounds

para el primer valor duplicado debajo de la línea de código se ejecutará y creará un array.

else object[key] = [object[key], value];

Después de eso, cada entrada duplicada se insertará en esta matriz.

else if (object[key] instanceof Array) object[key].push(value);

Producción :

 {
  username: 'Eren',
  units: [ 'kgs', 'pounds'],
  permission: 'false'
}