ax ios transformResponse возвращает неопределенный - PullRequest
0 голосов
/ 09 апреля 2020

Получив следующее ожидаемое response.data значение:

axios({
  method,
  url
}).then(response => { console.log(response) })

Однако, когда я добавляю свойство transformResponse следующим образом, я получаю response.data значение undefined:

axios({
  method,
  url,
  transformResponse: [(data) => {
    return data
  }]
}).then(response => { console.log(response) })

Может кто-нибудь сказать, что мне здесь не хватает! Спасибо

Ответы [ 2 ]

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

Вы можете проверить приведенный ниже пример для безопасного анализа. transformResponse Получите данные как необработанные данные, чтобы вы могли их проанализировать.

const instance = axios.create({
  baseURL: baseURL,
  transformResponse: [
    (data) => {
      let resp;
      try {
        resp = JSON.parse(data);
      } catch (error) {
        throw Error(
          `[requestClient] Error parsingJSON data - ${JSON.stringify(
            error
          )}`
        );
      }
      if (resp.status === "success") {
        return resp.data;
      } else {
        throw Error(`Request failed with reason -  ${data}`);
      }
    },
  ],
});

Иначе вы можете использовать перехватчик, чтобы упростить их.

//const axios = require("axios");
const jsonInterceptor = [
  (response) => response.data,
  (error) => Promise.reject(error),
];
function jsonClient() {
  const client = axios.create();
  client.interceptors.response.use(...jsonInterceptor);
  return client;
}
// Page 1

const jhttp = jsonClient();
jhttp
  .get("https://jsonplaceholder.typicode.com/todos/1")
  .then((data) => console.log(data));
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.2/axios.min.js"></script>
0 голосов
/ 09 апреля 2020

Я предлагаю вам использовать перехватчики, так как они более чистые

Перехватчики работают как промежуточное ПО для ваших запросов

удалить transformResponse и добавить это

axios.interceptors.response.use(function (response) {
  return response.data;
});
axios({
  method,
  url,
}).then(response => { console.log(response) })
...