Axios: Establecer baseURL en interceptores no funciona.

Creado en 9 jun. 2017  ·  3Comentarios  ·  Fuente: axios/axios

Resumen

establecer baseURL en interceptores no funciona.

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);
})

Contexto

  • versión de axios: por ejemplo: v0.16.2
  • Entorno: por ejemplo: nodo vv8.0.0, chrome 59.0.3071.86, macOS 10.12

Comentario más útil

Experimentó el mismo problema. Puede ser más un problema conceptual que un detalle de implementación. Me parece que establecer una baseURL es una forma de decir "anteponer esto a cada solicitud", lo que parece un poco inútil cuando lo configuras en cada solicitud. Aunque definitivamente se podría argumentar a favor de un condicional como:

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

Pero no funciona. Establecer un valor predeterminado global como este hace:
axios.defaults.baseURL = 'https://example.com';
al igual que pasar una configuración con la solicitud:
axios.post('/extra', { baseURL: 'https://example.com' })

En ambos casos, el campo 'url' de la configuración es ' https://example.com/extra ', pero la configuración de baseURL en el interceptor solo actualiza 'config.baseURL'. Quiero decir que tiene sentido por qué, literalmente solo está actualizando ese campo, pero sería bueno si también actualizara el campo de la URL o al menos se mencionara en los documentos (preferiblemente en letras grandes y negritas) que establecer baseURL en un interceptor es inútil / no recomendado.

@ Baoyx007 siempre puede cambiar el valor 'url' en la configuración manualmente

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

o en cada solicitud

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

Nodo v7.10.0
Axios v0.16.12

Todos 3 comentarios

Mírame Valores predeterminados de instancia personalizada axios.all no es una función # 948 mi funcionamiento es normal solo que no todo es una función

Experimentó el mismo problema. Puede ser más un problema conceptual que un detalle de implementación. Me parece que establecer una baseURL es una forma de decir "anteponer esto a cada solicitud", lo que parece un poco inútil cuando lo configuras en cada solicitud. Aunque definitivamente se podría argumentar a favor de un condicional como:

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

Pero no funciona. Establecer un valor predeterminado global como este hace:
axios.defaults.baseURL = 'https://example.com';
al igual que pasar una configuración con la solicitud:
axios.post('/extra', { baseURL: 'https://example.com' })

En ambos casos, el campo 'url' de la configuración es ' https://example.com/extra ', pero la configuración de baseURL en el interceptor solo actualiza 'config.baseURL'. Quiero decir que tiene sentido por qué, literalmente solo está actualizando ese campo, pero sería bueno si también actualizara el campo de la URL o al menos se mencionara en los documentos (preferiblemente en letras grandes y negritas) que establecer baseURL en un interceptor es inútil / no recomendado.

@ Baoyx007 siempre puede cambiar el valor 'url' en la configuración manualmente

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

o en cada solicitud

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

Nodo v7.10.0
Axios v0.16.12

Corregido en # 950

¿Fue útil esta página
0 / 5 - 0 calificaciones