Получить строки запроса как объект после URL с хешем - PullRequest
1 голос
/ 02 июля 2019

Итак, у меня есть URL с этим форматом.:

https://my-app.com/my-route/someOtherRoute#register?param1="122"&param2="333"

Я знаю, как получить строки запроса для обычного URL, но я не смог получить строки запроса, которые следуют после #

I, используя node-url и я сделал это до сих пор:

import * as urlTool from 'url';
const url = "https://my-app.com/my-route/someOtherRoute#register?param1="122"&param2="333"
const parsedUrl = urlTool.parse(url,true);
const { pathName, hash } = parsedUrl

Итак, до сих пор мои hash имеют это значение #register?param1="122"&param2="333", но как я могу получить строки запроса динамически, потому что запросСтроки могут быть, а могут и не быть, все время, и я также не знаю их названия, как я могу получить любые строки запроса, которые могут идти после # в URL?

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Используйте split и цикл for для извлечения параметров в объект:

var url = `https://my-app.com/my-route/someOtherRoute#register?param1="122"&param2="333"`

const [hash, params] = url.split('#')[1].split('?')

const o = new URLSearchParams(params)
const paramsObj = {}
for (var [key, value] of o.entries()) {
  paramsObj[key] = value
}

console.log(hash)
console.log(paramsObj)
1 голос
/ 02 июля 2019

Использование SearchParams

var url = `https://my-app.com/my-route/someOtherRoute#register?param1="122"&param2="333"`;
console.log(new URL(`https://1.com?${url.split("?")[1]}`).searchParams.get("param1"));

Построение объекта с использованием String # split и Array # сокращение

var url = `https://my-app.com/my-route/someOtherRoute#register?param1="122"&param2="333"`;
console.log(url.split("?")[1].split("&").reduce(function(result, param) {
  var [key, value] = param.split("=");
  result[key] = value;
  return result;
}, {}));

Думал, что было бы безопаснее написать что-то вроде этого:

function getParamsAfterHash(url) {
  if (typeof url !== "string" || !url) url = location.href;
  url = url.split("#")[1];
  if (!url) return {};
  url = url.split("?")[1];
  if (!url) return {};
  return url.split("&").reduce(function(result, param) {
    var [key, value] = param.split("=");
    result[key] = value;
    return result;
  }, {});
}

console.log(getParamsAfterHash(`https://my-app.com/my-route/someOtherRoute#register?param1="122"&param2="333"`));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...