#javascript #get #axios #jwt
#javascript #получить #axios #jwt
Вопрос:
Мне нужно ПОЛУЧИТЬ данные из API, который использует квадратные скобки как часть имени параметра. Я не писал API, так что не стреляйте в messenger!
Редактировать: я должен был отметить, что этот код будет выполняться на узле (на стороне сервера), а не в браузере.
Я использую Axios в Javascript, и это мой вызов axios:
axios.get(url, {params: {queryParams}})
.then(res => {
brands = res.data;
console.log(res.data);
})
.catch(error => {
console.log( 'nnnn')
console.log(error);
});
Параметры следующие. Для краткости я показываю три разных формата, которые я пробовал (прямой символ, экранированный и в кодировке ASCII), но при каждой попытке я передавал три параметра в одном и том же формате.
Set the query parameters
let queryParams = {
"tables": table,
"manifest": manifest,
"where[0][0]": field,
"where[0][1]": "=",
"where\[0\]\[2\]": searchValue,
"ordery_by": "id, ASC",
"limit": "100",
"app": "json",
'client_key': authkey
}
Во всех случаях axios, похоже, преобразует параметры в веб-токен javascript.
Если, с другой стороны, я объединяю параметры с URL в виде строки, запрос выполняется, и я получаю ожидаемые данные.
let fullPath = url.concat(
"?tables=", table,
"amp;manifest=", manifest,
"amp;where[0][0]=", field,
"amp;where[0][1]=", "=",
"amp;where[0][2]=", searchValue,
"amp;ordery_by=", "id, ASC",
"amp;limit=", "100",
"amp;app=", "json",
"amp;client_key=", authkey
)
Хотя у меня есть обходное решение (как показано выше), есть ли способ сделать это с помощью соответствующего объекта parameters?
Комментарии:
1. Axios не будет кодировать квадратные скобки и явно игнорируется. Есть PR, но он еще не был объединен. github.com/axios/axios/issues/3316
Ответ №1:
Если вы делаете это в браузере, вы можете использовать URLSearchParams() для итерации читаемого человеком объекта и создания строки запроса.
Для узла также доступен аналогичный модуль
axios также поддерживает передачу объекта URLSearchParams в качестве аргумента params
let queryParams = {
"tables": 1,
"manifest": 2,
"where[0][0]": 3,
"where[0][1]": "=",
"where[0][2]": 4,
"ordery_by": "id,ASC",
"limit": "100",
"app": "json",
'client_key': 'abc'
}
const sParams = new URLSearchParams(Object.entries(queryParams));
console.log('query string')
console.log(sParams.toString())
console.log('sParam entries')
console.log(JSON.stringify([...sParams]))
.as-console-wrapper { max-height: 100%!important;top:0;}
Сделав еще один шаг, вы можете создать полный URL-адрес с помощью конструктора URL
const url = new URL('https://myApi.com')
url.search = new URLSearchParams(Object.entries(queryParams));
console.log(url.href)
Комментарии:
1. У меня не было времени попробовать эти варианты, но я сделаю это в ближайшие несколько дней. Спасибо!
2. У меня было время попробовать использовать URLSearchParams и использовать конструктор URL, и он по-прежнему не удался таким же образом. Это очень странно.
3. Axios не будет кодировать квадратные скобки и явно игнорируется. Есть PR, но он еще не был объединен. github.com/axios/axios/issues/3316