Axios: Установить baseURL в перехватчиках не получается.

Созданный на 9 июн. 2017  ·  3Комментарии  ·  Источник: axios/axios

Резюме

установить baseURL в перехватчиках не работает.

const service = axios.create({
  baseURL: 'http://localhost/'
});

service.interceptors.request.use(config => {

  config.baseURL = 'dd'
  console.log(config.url) // output :  http://localhost/././../

  return config;
}, error => {
  // Do something with request error
  console.error(error); // for debug
  Promise.reject(error);
})

Контекст

  • версия axios :
  • Среда: например: node vv8.0.0, chrome 59.0.3071.86, macOS 10.12

Самый полезный комментарий

Испытал ту же проблему. Это может быть скорее концептуальная проблема, чем деталь реализации. Мне кажется, что установка baseURL - это способ сказать «добавлять это к каждому запросу», что кажется бессмысленным, когда вы устанавливаете его для каждого запроса. Хотя определенно можно было бы привести такие условные выражения, как:

axios.interceptors.request.use((config) => {
  return getAge()
  .then((age) => {
    if(age < 10){ config.baseURL = 'https://young.com' }
    else { config.baseURL = 'https://young.com' }
  })

Но это не работает. Установка глобального значения по умолчанию:
axios.defaults.baseURL = 'https://example.com';
как и передача конфигурации с запросом:
axios.post('/extra', { baseURL: 'https://example.com' })

В обоих случаях поле 'url' конфигурации - ' https://example.com/extra ', но установка baseURL в перехватчике обновляет только 'config.baseURL'. Я имею в виду, что это имеет смысл, почему вы буквально просто обновляете это поле, но было бы неплохо, если бы оно также обновило поле url или, по крайней мере, упомянуло в документах (желательно большими жирными буквами), что установка baseURL в перехватчике бесполезно / не рекомендуется.

@ Baoyx007 вы всегда можете просто вручную изменить значение url в конфиге

service.interceptors.request.use(config => {
  //config.baseURL = 'dd'
    config.url = BASE_URL + config.url
  return config;

или по любому запросу

axios.get('/hello', { baseURL: BASE_URL })

Узел v7.10.0
Axios v0.16.12

Все 3 Комментарий

посмотри мне Custom instance defaults axios.all не является функцией # 948 моя работа нормально только все не является функцией

Испытал ту же проблему. Это может быть скорее концептуальная проблема, чем деталь реализации. Мне кажется, что установка baseURL - это способ сказать «добавлять это к каждому запросу», что кажется бессмысленным, когда вы устанавливаете его для каждого запроса. Хотя определенно можно было бы привести такие условные выражения, как:

axios.interceptors.request.use((config) => {
  return getAge()
  .then((age) => {
    if(age < 10){ config.baseURL = 'https://young.com' }
    else { config.baseURL = 'https://young.com' }
  })

Но это не работает. Установка глобального значения по умолчанию:
axios.defaults.baseURL = 'https://example.com';
как и передача конфигурации с запросом:
axios.post('/extra', { baseURL: 'https://example.com' })

В обоих случаях поле 'url' конфигурации - ' https://example.com/extra ', но установка baseURL в перехватчике обновляет только 'config.baseURL'. Я имею в виду, что это имеет смысл, почему вы буквально просто обновляете это поле, но было бы неплохо, если бы оно также обновило поле url или, по крайней мере, упомянуло в документах (желательно большими жирными буквами), что установка baseURL в перехватчике бесполезно / не рекомендуется.

@ Baoyx007 вы всегда можете просто вручную изменить значение url в конфиге

service.interceptors.request.use(config => {
  //config.baseURL = 'dd'
    config.url = BASE_URL + config.url
  return config;

или по любому запросу

axios.get('/hello', { baseURL: BASE_URL })

Узел v7.10.0
Axios v0.16.12

Исправлено в # 950

Была ли эта страница полезной?
0 / 5 - 0 рейтинги