#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;
}
Ответ №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. Да, я пробовал это раньше, но безуспешно.