Axios: Définir la baseURL dans les intercepteurs ne fonctionne pas.

Créé le 9 juin 2017  ·  3Commentaires  ·  Source: axios/axios

Sommaire

set baseURL dans les intercepteurs ne fonctionne pas.

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

Le contexte

  • version axios : ex : v0.16.2
  • Environnement : par exemple : nœud vv8.0.0, chrome 59.0.3071.86, macOS 10.12

Commentaire le plus utile

Expérimenté le même problème. Il peut s'agir plus d'un problème conceptuel que d'un détail de mise en œuvre. Il me semble que définir une baseURL est une façon de dire "ajouter ceci à chaque demande", ce qui semble un peu inutile lorsque vous le définissez à chaque demande. Bien qu'un cas puisse certainement être fait pour un conditionnel comme :

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

Mais ça ne marche pas. Définir une valeur par défaut globale comme celle-ci :
axios.defaults.baseURL = 'https://example.com';
tout comme le fait de passer une configuration avec la requête :
axios.post('/extra', { baseURL: 'https://example.com' })

Dans les deux cas, le champ 'url' de la configuration est ' https://example.com/extra ', mais la définition de la baseURL dans l'intercepteur ne met à jour que 'config.baseURL'. Je veux dire qu'il est logique pourquoi, vous mettez littéralement à jour ce champ, mais ce serait bien s'il mettait également à jour le champ d'URL ou au moins mentionné dans la documentation (de préférence en gros caractères gras) que la définition de baseURL dans un intercepteur est inutile/déconseillé.

@ Baoyx007, vous pouvez toujours modifier manuellement la valeur 'url' dans la configuration

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

ou à chaque demande

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

Nœud v7.10.0
Axios v0.16.12

Tous les 3 commentaires

regardez-moi Valeurs par défaut de l'instance personnalisée axios.all n'est pas une fonction # 948 mon fonctionnement normal seulement tout n'est pas une fonction

Expérimenté le même problème. Il peut s'agir plus d'un problème conceptuel que d'un détail de mise en œuvre. Il me semble que définir une baseURL est une façon de dire "ajouter ceci à chaque demande", ce qui semble un peu inutile lorsque vous le définissez à chaque demande. Bien qu'un cas puisse certainement être fait pour un conditionnel comme :

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

Mais ça ne marche pas. Définir une valeur par défaut globale comme celle-ci :
axios.defaults.baseURL = 'https://example.com';
tout comme le fait de passer une configuration avec la requête :
axios.post('/extra', { baseURL: 'https://example.com' })

Dans les deux cas, le champ 'url' de la configuration est ' https://example.com/extra ', mais la définition de la baseURL dans l'intercepteur ne met à jour que 'config.baseURL'. Je veux dire qu'il est logique pourquoi, vous mettez littéralement à jour ce champ, mais ce serait bien s'il mettait également à jour le champ d'URL ou au moins mentionné dans la documentation (de préférence en gros caractères gras) que la définition de baseURL dans un intercepteur est inutile/déconseillé.

@ Baoyx007, vous pouvez toujours modifier manuellement la valeur 'url' dans la configuration

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

ou à chaque demande

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

Nœud v7.10.0
Axios v0.16.12

Corrigé en #950

Cette page vous a été utile?
0 / 5 - 0 notes