Javascript - запросить параметры из window.location.href - PullRequest
0 голосов
/ 06 марта 2020

Я новичок в синтаксисе Javascript; извините, если это слишком просто c.

С этим запросом:

const params = queryString.parse(window.location.href)

Я получаю:

{http://localhost:3000/#access_token: "accessToken", refresh_token: "refreshToken"}

и теперь я могу легко сделать:

const refresh_token = params.refresh_token;

Но как мне получить "accessToken"?

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Похоже, что ха sh искажен JSON. В то время как это можно было бы разобрать, добавив { слева, добавив " s вокруг символов слова перед : и JSON.parse -ing it:

// const { hash } = window.location;
// const badJSON = '{' + hash.slice(1);
// now, you'll have:
const badJSON = '{' + 'access_token: "accessToken", refresh_token: "refreshToken"}';
const json = badJSON.replace(/\w+(?=:)/g, '"$&"');
const obj = JSON.parse(json);
console.log(obj.access_token);
console.log(obj.refresh_token);

Это очень неудобно и является решением проблемы X / Y. Было бы гораздо лучше исправить все, что генерирует URL, чтобы его формат был в стандартном формате, чтобы вы могли проанализировать его с помощью URLSearchParams. Например, URL-адрес должен быть примерно таким:

http://localhost:3000/?access_token=accessToken&refresh_token=refreshToken

И тогда его можно очень легко проанализировать:

const url = 'http://localhost:3000/?access_token=accessToken&refresh_token=refreshToken';
const params = new URLSearchParams(url.match(/\?.*/)[0]);

// in your real code, the above can be replaced with:
// const params = new URLSearchParams(window.location.search);

console.log(params.get('access_token'));
0 голосов
/ 06 марта 2020

Это сделал трюк:

getHashParams() {
    const hashParams = {};
    const r = /([^&;=]+)=?([^&;]*)/g;
    const q = window.location.hash.substring(1);
    let e = r.exec(q);
    while (e) {
      hashParams[e[1]] = decodeURIComponent(e[2]);
      e = r.exec(q);
    }
    return hashParams;
  }

и звонил так:

const params = this.getHashParams();
console.log(params);

вошел:

{access_token: "aceessToken", refresh_token: "refreshToken"} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...