Axios ‘mode’ не существует в типе ‘AxiosRequestConfig’

#typescript #axios #cors

#typescript #axios #cors

Вопрос:

Опишите ошибку

Я пытаюсь сделать запрос, для которого требуется установить режим no-cors . Однако я не могу перейти mode в конфигурацию Axios. Я получаю сообщение об ошибке TypeScript Object literal may only specify known properties, and 'mode' does not exist in type 'AxiosRequestConfig'

В конечном счете, мне нужно иметь возможность отправлять запрос там, где sec-fetch-mode: no-cors он присутствует.

 const client: AxiosInstance = axios.create({
  baseURL: apiBaseUrl,
  withCredentials: true,
  headers: {
    'Content-Type': 'application/json; charset=utf-8',
  },
  adapter: cache.adapter,
});
  

Будь то сквозное mode или другое свойство, мне нужен способ сделать этот запрос.

Для воспроизведения

 const mediaUrl: string = await client
  .get(paths.moment.media.getMediaUrl({ mediaId: media.id }), {
    mode: 'no-cors'
  })
.then(({ data }: { data: string }): string => data);
  

Ожидаемое поведение

Чтобы иметь возможность устанавливать mode значение no-cors для конкретного запроса.

Окружающая среда

  • Axios 0.20.0
  • TypeScript 4.0.3

Ответ №1:

mode не поддерживается для настройки запросов axios.

mode доступно по запросу, но не в XMLHttpRequest. Если доступен XMLHttpRequest, он используется axios по умолчанию: (defaults.js )

 function getDefaultAdapter() {
  var adapter;
  if (typeof XMLHttpRequest !== 'undefined') {
    // For browsers use XHR adapter
    adapter = require('./adapters/xhr');
  } else if (typeof process !== 'undefined' amp;amp; Object.prototype.toString.call(process) === '[object process]') {
    // For node use HTTP adapter
    adapter = require('./adapters/http');
  }
  return adapter;
}
  

См.: аналогичная проблема в репозитории axios

Ответ №2:

Вы пробовали устанавливать sec-fetch-mode: no-cors заголовок в запросе?

 const mediaUrl: string = await client
  .get(paths.moment.media.getMediaUrl({ mediaId: media.id }), {
    headers: {
      'sec-fetch-mode': 'no-cors',
    }
  })
.then(({ data }: { data: string }): string => data);
  

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

1. Да, я пробовал это раньше, но безуспешно.