Невозможно получить доступ к полю ошибки из ответа об ошибке по оси ios (разница с devtools) - PullRequest
1 голос
/ 28 апреля 2020

Я улавливаю ошибку с помощью топора ios, и в инструментах разработчика я вижу следующий ответ:

apiName: null
error: "Cannot send package."
errors: null
message: "Conflict"
path: "/api/package/123"
status: 409
timestamp: "2020-04-28T10:11:11.668+0000"

Я хочу получить доступ к ошибке поля с помощью «Не удается отправить пакет». ценность, но что бы я ни делал, я не могу Когда я в console.log в своем операторе catch получаю:

error.response.status:  409
error.response.data.error:  undefined
error.message:  Request failed with status code 409
error.error:  undefined
error.response.data:  Blob {size: 178, type: "application/json"}
error.response.headers:  {cache-control: "no-cache, no-store, max-age=0, must-revalidate", content-type: "application/json", expires: "0", pragma: "no-cache"}

Есть ли способ получить доступ к полю ошибок? Как это можно сделать? JSON.parse(JSON.stringify(error)) также не помогло.

Проблема может заключаться в том, что это запрос POST для получения файла PDF, поэтому отправленная конфигурация:

   const config = {
    responseType: 'blob',
    headers: {
      Accept: 'application/pdf, application/json',
    },
  };

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Вы используете responseType: 'blob', но это относится и к ошибкам. Чтение большого двоичного объекта обратно в JSON должно работать:

const reader = new FileReader();
reader.onload = function() {
    const data = JSON.parse(this.result);
    // ...
};
reader.readAsText(error.response.data);

Эта проблема отслеживается на топоре ios https://github.com/axios/axios/issues/815#issuecomment -453963910 , где вы можете найти даже перехватчик для автоматически преобразовать ответ от большого двоичного объекта обратно в json в случае ошибки.

0 голосов
/ 28 апреля 2020

Вы можете справиться с этим в блоке catch вашего запроса что-то вроде этого:

axios.get('/user?ID=12345')
  .then(function (response) {
    // handle success
    console.log(response);
  })
  .catch(function (error) {
    // handle error
    // can add breakpoints here to observe the error object
    console.log(error.response && error.response.data);
  })

Если вы попытаетесь установить несколько точек останова в блоке catch, вы можете навести курсор и увидеть структуру объекта ошибки.

Для справки вы можете посмотреть документацию здесь

...