Axios: Setel baseURL di pencegat tidak berfungsi.

Dibuat pada 9 Jun 2017  ·  3Komentar  ·  Sumber: axios/axios

Ringkasan

set baseURL di pencegat tidak berfungsi.

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

Konteks

  • versi axios: misalnya: v0.16.2
  • Lingkungan: misalnya: node vv8.0.0, chrome 59.0.3071.86, macOS 10.12

Komentar yang paling membantu

Mengalami masalah yang sama. Ini mungkin lebih merupakan masalah konseptual daripada detail implementasi. Bagi saya, mengatur baseURL adalah cara untuk mengatakan "tambahkan ini ke setiap permintaan", yang sepertinya tidak ada gunanya ketika Anda mengaturnya di setiap permintaan. Meskipun sebuah kasus pasti dapat dibuat untuk kondisi seperti:

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

Tapi itu tidak berhasil. Menyetel default global seperti ini:
axios.defaults.baseURL = 'https://example.com';
seperti halnya melewati konfigurasi dengan permintaan:
axios.post('/extra', { baseURL: 'https://example.com' })

Dalam kedua kasus, bidang 'url' dari konfigurasi adalah ' https://example.com/extra ', tetapi menyetel baseURL di pencegat hanya memperbarui 'config.baseURL'. Maksud saya masuk akal mengapa, Anda benar-benar hanya memperbarui bidang itu, tetapi alangkah baiknya jika memperbarui bidang url juga atau setidaknya disebutkan dalam dokumen (sebaiknya dalam huruf tebal besar) bahwa pengaturan baseURL di pencegat adalah tidak berguna/tidak dianjurkan.

@ Baoyx007 Anda selalu dapat mengubah nilai 'url' di konfigurasi secara manual

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

atau pada setiap permintaan

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

Simpul v7.10.0
Axios v0.16.12

Semua 3 komentar

lihat saya Contoh kustom default axios.all bukan fungsi #948 saya bekerja normal hanya semua bukan fungsi

Mengalami masalah yang sama. Ini mungkin lebih merupakan masalah konseptual daripada detail implementasi. Bagi saya, mengatur baseURL adalah cara untuk mengatakan "tambahkan ini ke setiap permintaan", yang sepertinya tidak ada gunanya ketika Anda mengaturnya di setiap permintaan. Meskipun sebuah kasus pasti dapat dibuat untuk kondisi seperti:

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

Tapi itu tidak berhasil. Menyetel default global seperti ini:
axios.defaults.baseURL = 'https://example.com';
seperti halnya melewati konfigurasi dengan permintaan:
axios.post('/extra', { baseURL: 'https://example.com' })

Dalam kedua kasus, bidang 'url' dari konfigurasi adalah ' https://example.com/extra ', tetapi menyetel baseURL di pencegat hanya memperbarui 'config.baseURL'. Maksud saya masuk akal mengapa, Anda benar-benar hanya memperbarui bidang itu, tetapi alangkah baiknya jika memperbarui bidang url juga atau setidaknya disebutkan dalam dokumen (sebaiknya dalam huruf tebal besar) bahwa pengaturan baseURL di pencegat adalah tidak berguna/tidak dianjurkan.

@ Baoyx007 Anda selalu dapat mengubah nilai 'url' di konfigurasi secara manual

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

atau pada setiap permintaan

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

Simpul v7.10.0
Axios v0.16.12

Diperbaiki di #950

Apakah halaman ini membantu?
0 / 5 - 0 peringkat