Как добавить пользовательское свойство в конфигурацию axios?

#typescript #axios

Вопрос:

Этот перехватчик должен обновить мои токены, если срок их действия истек.

 declare module "axios" {
  export interface AxiosRequestConfig {
    _retry?: boolean;
  }
}
axios.interceptors.response.use(
  (res) => res,
  (error: AxiosError) => {
    const originalRequest = error.config;
    console.log(originalRequest._retry); // always undefined
    if (error?.response?.status === 401 amp;amp; !originalRequest._retry) {
      originalRequest._retry = true;
      return axios
        .post("/auth/refresh-token", {}, { withCredentials: true })
        .then((res) => {
          if (res.status === 201) {
            return axios(originalRequest);
          }
        })
    }
    return Promise.reject(error);
  }
);
 

Ключевым моментом является _retry свойство, которое я добавил в конфигурацию запроса, чтобы оно предотвращало бесконечный цикл. но произошло обратное! это создает бесконечный цикл, потому _retry что он всегда есть undefined .

Я нашел некоторые проблемы на их странице Github, но не нашел решения.

ПРАВКА: Су Ю попробовал этот код с последней версией axios, и он сработал. Так что, может быть, это ошибка. Я создал проблему в репозитории axios: https://github.com/axios/axios/issues/3920

У меня есть вопрос: что, если запрос токена обновления также вернет ошибку 401?

ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ: Наконец-то я решил эту проблему. Я нахожусь в бесконечном цикле, потому что запрос токена обновления возвращает ошибку 401, если срок действия токена обновления истек. Поэтому я изменил его на 400, и все работает так, как ожидалось. Я собираюсь ударить себя прямо сейчас!

Ответ №1:

Какую версию axios вы используете? Похоже, что axios исправил проблему на 0.19.2. Вы можете проверить параметры настраиваемой конфигурации для исправления запроса на извлечение.

Я попробовал последнюю версию(0.21.1) axios, пользовательская конфигурация работает нормально.

Комментарии:

1. да, с аксиосом все в порядке. это была моя вина (прочитайте правки). Спасибо вам:)