Axios: Set baseURL in Interceptors funktioniert nicht.

Erstellt am 9. Juni 2017  ·  3Kommentare  ·  Quelle: axios/axios

Zusammenfassung

set baseURL in Interceptors funktioniert nicht.

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

Kontext

  • Axios-Version: zB: v0.16.2
  • Umgebung: zB: Knoten vv8.0.0, chrome 59.0.3071.86, macOS 10.12

Hilfreichster Kommentar

Habe das gleiche Problem erlebt. Es könnte sich eher um ein konzeptionelles Problem als um ein Implementierungsdetail handeln. Mir scheint, dass das Festlegen einer baseURL eine Möglichkeit ist, "jeder Anfrage voranzustellen", was irgendwie sinnlos erscheint, wenn Sie sie bei jeder Anfrage festlegen. Obwohl ein Fall für eine Bedingung wie:

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

Aber es funktioniert nicht. Das Festlegen eines globalen Standardwerts wie folgt:
axios.defaults.baseURL = 'https://example.com';
ebenso wie die Übergabe einer Konfiguration mit der Anfrage:
axios.post('/extra', { baseURL: 'https://example.com' })

In beiden Fällen ist das 'url'-Feld der Konfiguration ' https://example.com/extra ', aber das Setzen der baseURL im Interceptor aktualisiert nur 'config.baseURL'. Ich meine, es macht Sinn, warum Sie buchstäblich nur dieses Feld aktualisieren, aber es wäre schön, wenn es auch das URL-Feld aktualisiert oder zumindest in den Dokumenten (vorzugsweise in großen Fettdruck) erwähnt, dass die Einstellung von baseURL in einem Interceptor ist nutzlos/nicht empfehlenswert.

@Baoyx007 Sie können den 'url'-Wert in der Konfiguration jederzeit manuell ändern

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

oder auf jede Anfrage

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

Knoten v7.10.0
Axios v0.16.12

Alle 3 Kommentare

Look me Custom Instance Defaults axios.all is not a function #948 my working normal only all is not a function

Habe das gleiche Problem erlebt. Es könnte sich eher um ein konzeptionelles Problem als um ein Implementierungsdetail handeln. Mir scheint, dass das Festlegen einer baseURL eine Möglichkeit ist, "jeder Anfrage voranzustellen", was irgendwie sinnlos erscheint, wenn Sie sie bei jeder Anfrage festlegen. Obwohl ein Fall für eine Bedingung wie:

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

Aber es funktioniert nicht. Das Festlegen eines globalen Standardwerts wie folgt:
axios.defaults.baseURL = 'https://example.com';
ebenso wie die Übergabe einer Konfiguration mit der Anfrage:
axios.post('/extra', { baseURL: 'https://example.com' })

In beiden Fällen ist das 'url'-Feld der Konfiguration ' https://example.com/extra ', aber das Setzen der baseURL im Interceptor aktualisiert nur 'config.baseURL'. Ich meine, es macht Sinn, warum Sie buchstäblich nur dieses Feld aktualisieren, aber es wäre schön, wenn es auch das URL-Feld aktualisiert oder zumindest in den Dokumenten (vorzugsweise in großen Fettdruck) erwähnt, dass die Einstellung von baseURL in einem Interceptor ist nutzlos/nicht empfehlenswert.

@Baoyx007 Sie können den 'url'-Wert in der Konfiguration jederzeit manuell ändern

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

oder auf jede Anfrage

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

Knoten v7.10.0
Axios v0.16.12

Behoben in #950

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen