Axios: Permintaan params tidak digabung dengan params instance

Dibuat pada 31 Mei 2019  ·  83Komentar  ·  Sumber: axios/axios

Jelaskan bugnya

Parameter permintaan khusus tidak digabungkan dengan parameter default instance.

Untuk Mereproduksi

const instance = axios.create({
    baseURL: "http://www.example.com",
    params: {
      q: "question",
    }
  });
instance.get("/page", 
  { 
    params: { 
      page: 2 
    }
  }
)

Apa yang terjadi adalah bahwa objek param permintaan menimpa objek param default instance. Instance tidak lagi memiliki parameter kueri q .

Perilaku yang diharapkan

Menurut dokumen, semua opsi konfigurasi digabungkan . https://github.com/axios/axios#instance -methods

Saya berharap permintaan berisi parameter q dan page . Ini juga cara kerjanya di versi 0.18.0, yang saya perhatikan.

Lingkungan:

  • Versi Axios: 0.19.0
  • OS: 10.14.5 (18F132)
  • Browser: Node Express, dan Chrome
  • Browser: Node 10.15.0, Chrome Versi 74.0.3729.169 (Builan Resmi) (64-bit)
review

Komentar yang paling membantu

Menunggu perbaikan resmi

Semua 83 komentar

Berikut ini contoh yang sedang berjalan -- https://runkit.com/philipbjorge/axios-regression

Memiliki masalah serupa dengan token autentikasi berbasis sesi kami yang juga tidak digabungkan.

Saya _percaya_ perbaikannya sesederhana memindahkan params ke properti ke bagian deepMergeProperties . Perbedaan di sini: https://github.com/axios/axios/compare/8d0b92b2678d96770304dd767cd05a59d37f12cf...zackseuberling :zs-fix-merge-params

@zackseuberling bisakah Anda mengajukan permintaan tarik untuk ini?

Saya memiliki masalah yang sama.

@jasonsaayman tes sekarang lewat (untuk apa yang saya anggap perilaku yang benar) di #2196

semoga segera rilis, masalah ini membuatku cukup menyebalkan

Memiliki masalah yang sama. Kapan itu akan diperbaiki?

Sama di sini @wphestiraid 😬

Menurunkan versi ke 0.18.1 memperbaikinya untuk saya sebagai solusi! Itu telah memperbaiki kerentanan keamanan.

@serranoarevalo Saya pikir kita bisa menggunakan 0.18.1 :smile:

Ini tampaknya juga terjadi dengan method , jika hanya ditentukan dalam panggilan create dan bukan request . Membawa saya sepanjang hari untuk mencari tahu, pasti perubahan yang melanggar. (Haruskah ini menjadi masalah yang terpisah, atau merupakan bagian dari masalah umum yang sama?)

Masalah yang sama di sini

ada berita tentang yang satu ini? kapan akan diperbaiki?

ada berita tentang yang satu ini? kapan akan diperbaiki?

Cukup gunakan v0.18.1 untuk saat ini. ️

itulah yang saya gunakan, tetapi saya perlu meningkatkan ke v0.19.0 setelah ini diperbaiki karena masalah keamanan

itulah yang saya gunakan, tetapi saya perlu meningkatkan ke v0.19.0 setelah ini diperbaiki karena masalah keamanan

Masalah keamanan seperti apa? v0.18.0 memiliki masalah keamanan, v0.18.1 baik-baik saja.

NPM masih menandai 0,18.1 sebagai rentan selama audit - kemungkinan besar.

Jika Anda perlu menggunakan axios 0.19 seperti saya, Anda dapat mengelola parameter seperti ini dan itu akan berfungsi dengan baik untuk saat ini sebagai solusi .

// Pass to create only these params
const instance = axios.create({
  headers,
  baseURL,
  timeout,
});

// Pass others to the instance request
instance.request({
  method,
  url,
  data,
  ...options,
});

Menunggu perbaikan resmi

suara positif. hanya menghabiskan sore hari mengejar bug ini dan datang ke sini untuk menulis masalah.

Apakah ada kemajuan untuk memberikan perbaikan?

https://github.com/axios/axios/blob/v0.19.0/lib/core/mergeConfig.js#L18 -L22

module.exports = function mergeConfig(config1, config2) {
  // eslint-disable-next-line no-param-reassign
  config2 = config2 || {};
  var config = {};

  utils.forEach(['url', 'method', 'params', 'data'], function valueFromConfig2(prop) {
    if (typeof config2[prop] !== 'undefined') {
      config[prop] = config2[prop];
    }
  });

kode v0.19.0 menunjukkan bahwa mergeConfig(axios_instance.defaults, config)
hanya permintaan config.params yang digunakan.

Mengapa versi minor tidak kompatibel dengan versi sebelumnya?
Tidak ada tes untuk ini?
Saya harus bertanya.

@magicdawn saya pikir mereka kacau. Saya tidak mengerti apa yang mereka tunggu untuk menggabungkan perbaikan. Tolong @emilyemorehouse , bantu kami dengan https://github.com/axios/axios/pull/2196 🙏!

Ada berita? Saya mendapat kesalahan yang sama kemudian memutakhirkan ke versi terbaru.

Apa masalahnya ini akan diperbaiki!!

Butuh beberapa saat untuk menemukan masalah ini... menjengkelkan. Menunggu perbaikan juga.

Mungkin peretasan, tetapi Anda juga dapat menambal metode get untuk instance aksioma yang dibuat:

const client = axios.create({
  baseURL: YOUR_URL,
})
client.originalGet = client.get
client.get = (url, { params, ...config }) =>
  client.originalGet(url, {
    ...config,
    params: {
      key: YOUR_API_KEY,
      ...params,
    },
  })


// use it like normal
client.get('/something', { params: paramsToMerge } )

Saya membungkus instance create dan menambal semua metode seperti ini:

export const createInstance = (config?: AxiosRequestConfig): AxiosInstance => {
  const instance = axios.create(config);

  // Patch methods to merge default params into each request.
  // https://github.com/axios/axios/issues/2190
  for (const [method, configIndex] of methodsToPatch as Array<[keyof AxiosInstance, number]>) {
    const orig = instance[method] as Function;
    // @ts-ignore
    instance[method] = (...args: any[]) => {
      if (!args[configIndex]) {
        args[configIndex] = {};
      }
      args[configIndex].params = {
        ...(instance.defaults.params || {}),
        ...(args[configIndex].params || {}),
      };
      return orig.apply(instance, args);
    };
  }

  return instance;
};

const methodsToPatch = [
  ['getUri', 0],
  ['request', 0],
  ['get', 1],
  ['delete', 1],
  ['head', 1],
  ['post', 2],
  ['put', 2],
  ['patch', 2],
];

Untuk semua orang yang mencari solusi, Anda dapat menggunakan milik saya (mungkin tidak berlaku untuk semua):

npm i qs

axios.interceptors.request.use(config => {
    config.paramsSerializer = params => qs.stringify({ ...params, myValue: 'foo' });
    return config;
}

@janpantel Saya ingin tahu, mengapa tidak memodifikasi params saja?

axios.interceptors.request.use(config => {
    config.params.myValue = 'foo';
    return config;
}

@janpantel terima kasih saya pikir itu berfungsi seperti itu, juga lebih bersih daripada alternatif lain

Kami memiliki kesalahan yang sangat mirip.

Faktanya kami bahkan tidak dapat menentukan instance apa pun params dengan axios.create() .
Sementara itu kami jatuh kembali ke pencegat permintaan ...

Sama untuk ku. Membuatku gila hari ini! Semua bekerja dengan baik. Lalu tiba-tiba saya mendapatkan masalah Otentikasi dan masalah CORS?! Yargh...

Saya mengetahui bahwa saya telah memperbarui dari v18 ke v19 dan kemudian mewarisi bug ini, saya kira. Tampaknya parameter 'default' yang saya definisikan dalam definisi instance (parameter authkey sekolah lama) tidak digabungkan ketika saya memanggil instance itu nanti dengan params baru, params baru membunuh default :(.

Diturunkan ke versi 18 menyelesaikannya. Semoga mereka segera memperbaikinya, saya suka semua modul saya up-to-date! :P

Saya beralih menggunakan umi-request di node & browser sekarang.
sejauh ini baik. 😄

Masalah yang sama masih keluar sejak 2020.
Apakah ini berjalan seperti yang dirancang atau kapan masalah ini dapat diselesaikan?

Versi Axios: 0.19.0

Terima kasih telah menyediakan lib yang bermanfaat!

v0.19.1 masih memiliki bug ini

Perbaiki ini sudah. ini benar-benar menjengkelkan. membawa saya 15 menit untuk mencari bug ini.

Masalah yang sama di sini menggunakan [email protected] . Menggunakan pencegat sebagai solusi.

Masih mendapatkan masalah yang sama dengan [email protected]. Turunkan versi aksio untuk membuatnya berfungsi.

npm install --save [email protected]

Memiliki masalah ini juga. Tolong perbaiki

semacam drama tanpa akhir

Bahkan parameter instance tidak akan digabungkan dengan parameter panggilan. Parameter instans tidak masuk ke parameter permintaan sama sekali. Jika saya membuat instance dan mendefinisikan params, mereka tidak akan pernah ditemukan di salah satu permintaan get saya.

Menurunkan versi adalah opsi yang lebih mudah daripada menentukan parameter dengan setiap panggilan get.

Mengapa masalah ini ditutup? Seperti yang disebutkan @renestalder , dalam versi terakhir, tidak ada parameter instans yang muncul dalam permintaan apa pun yang membuat metode create tidak berguna.

Itu ditutup karena diperbaiki di #2656, tetapi masih belum ada versi untuk itu.

Saya juga menggunakan pencegat sebagai solusi, seperti yang disarankan @cheelahim :

axios.interceptors.request.use(config => {
  config.params. = {
    myValue1: 'foo',
    myValue2: 'bar',
    ...config.params,        
  }
    return config;
}

Tapi masih menunggu versi baru untuk memperbaiki bug ini.

Axios get & params

      const params = {
        name,
        id,
        pageIndex,
        pageSize,
      };
      const url = `/api/poi/query`;
      axios
      // .get(url, params)
      .get(url, {
        params,
      })
    .then(json => {
        // do something
      })
     .catch(err => console.log(`error`, err));

https://stackoverflow.com/questions/40947650/axios-get-in-url-works-but-with-second-parameter-as-object-it-doesnt

Wow! hampir 1 tahun kemudian!

Bugnya masih ada! Tidak percaya......

Perbaikan telah digabungkan di #2656 tetapi versi untuk itu belum dipotong

Turunkan saja ke 0.18.0

Mengapa ditutup?

Sayangnya fetch keluar segera setelah Anda membutuhkan acara kemajuan atau dukungan pembatalan.

Cukup sematkan versi Anda ke ^0.18.1 .

@techouse pindah ke alternatif adalah solusi yang lebih baik.

Saya selalu suka menggunakan axios. Tetapi gagasan bahwa perbaikan ini telah ada selama ini dan tidak ada yang dapat mengaturnya untuk menetapkannya ke versi hanyalah lelucon, inilah saatnya untuk melanjutkan. Atau minta seseorang untuk mengelola ini yang benar-benar ingin memajukan produk.

Jon Alberghini
Direktur Teknologi
[email protected]
Hai. 802-323-4558 | C. 802-323-4558 | www.legacyresearch.com http://www.legacyresearch.com


Dari: Evgeny [email protected]
Dikirim: Kamis, 23 April 2020 10:59:32
Kepada: axios/axios [email protected]
Cc: Jon Alberghini [email protected] ; Komentar [email protected]
Subjek: Re: [axios/axios] Params permintaan tidak digabungkan dengan params instans (#2190)

@techouse https://github.com/techouse pindah ke alternatif adalah solusi yang lebih baik.


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub https://github.com/axios/axios/issues/2190#issuecomment-618445756 , atau berhenti berlangganan https://github.com/notifications/unsubscribe-auth/AF6OZWIPRREAQP5OGY437X3ROBJVJANCQSM4HRPA6ANFSM4HRPA .

Saya pikir itu ditutup karena perbaikan telah digabungkan dan seharusnya dirilis di v0.20.0 . Lihat di sini

Masalah yang sama di sini, berharap itu akan segera diperbaiki!

+1. penurunan untuk saat ini. smh.

@khastation @raphaelbadawi @jonathanalberghini @techouse @AndyOGo

Alternatif:

@mahnunchik
Sayangnya fetch keluar segera setelah Anda membutuhkan acara kemajuan atau dukungan pembatalan .

@AndyOGo Dapat diimplementasikan seperti https://javascript.info/fetch-progress

Saya menemukan jalan keluar menggunakan beberapa dekonstruksi untuk memisahkan param kunci. Kode sementara pasti, tetapi karena penggabungan sudah selesai dan 0.20.0 sedang berlangsung, saya sangat yakin. Axios masih merupakan cara saya untuk pergi, bahkan jika saya berpengalaman dengan fetch(). Hal-hal biasanya sangat ramping dengan Axios ;-)

Terima kasih @mahnunchik
Meskipun saya berbicara tentang acara kemajuan untuk diunduh dan diunggah !

Terima kasih atas pertanyaan Anda @bdrtsky
Terutama karena alasan ini:

  • fetch menentukan beberapa regresi dibandingkan dengan XMLHttpRequest
  • pembatalan menjadi penting segera setelah Anda membangun layanan skala besar
  • Saya membuat pengunggah file, jadi saya membutuhkan penanganan kemajuan yang lebih canggih

Ini ditutup karena perbaikan sudah ditetapkan ke rilis 0,20. Kami saat ini sedang mengerjakan rilis itu, titik 0,20 adalah untuk memperbaiki regresi dan merilis Axios yang stabil lagi.

Ini sedang dalam proses, untuk pembaruan periksa proyek 0,20.

Apakah mungkin untuk memasukkannya ke dalam versi patch 0.19.3? Cacat tidak dapat ditutup jika tidak diperbaiki dalam rilis minor yang sama ...

Saya telah membuka kembali tetapi kami tidak akan merilis 0,19.3. Kami ingin mendapatkan stabilitas dalam rilis 0.20 yang menghapus semua regresi dari 0.18.0 ke 0.19.2.

Tampaknya satu-satunya solusi yang mungkin rn adalah menurunkan versi.

Kapan kita bisa mengharapkan rilis 0.20 yang sulit dipahami ini? Apakah ada versi beta yang dapat kami gunakan untuk sementara waktu?

@adamreisnz Saya sedang mengerjakan rilis 0,20 tetapi masih ada sekitar 60 permintaan tarikan ganjil (diturunkan dari 120 ganjil), dengan beberapa pekerjaan yang sangat tua dan bervariasi dalam memeriksa dan memastikan permintaan tarikan ini masih relevan, jangan berikan perubahan yang melanggar, lakukan tes, jangan sertakan file yang dikompilasi, dll. Ini adalah pekerjaan. Saya berusaha untuk mencoba memasukkannya ke pra-rilis paling lambat Juli. Kami akan senang membantu menguji rilis ini karena kami benar-benar ingin melakukannya dengan benar sebelum kami mengerjakan versi v1.1.

Itu masalah yang mengganggu, semoga bisa diperbaiki, dipertahankan untuk waktu yang lama.

ingin melakukannya dengan benar sebelum kami mengerjakan v1

Ada banyak ruang di 0.x untuk membuat rilis tambahan sebelum 1.0.0 ; Anda tidak perlu menjejalkan semuanya ke rilis berikutnya. Faktanya, orang dapat berargumen bahwa itu hanya akan membuat bug baru yang potensial lebih sulit untuk dilacak.

@markcarver Tentu kita bisa Namun Axios dilihat sebagai pra-rilis saat ini karena tanpa v1 tampaknya kebanyakan orang Axios belum merilis API publik lihat SemVer PublicAPI . Dengan v0.20.0 kami ingin menghadirkan stabilitas dan memperbaiki sebagian besar regresi dari cabang 0.19.x karena beberapa masalah disajikan di cabang ini serta mengatasi kesalahan yang mudah dimenangkan.

Kami juga perlu menghapus backlog dari pull request pada saat yang bersamaan. Sangat sulit untuk menangani 120 permintaan tarik aneh di mana beberapa di antaranya berasal dari tahun 2017. Saya berjanji kita akan menyelesaikan masalah ini, saya tidak akan kemana-mana dan akan mendukung dan mengerjakan Axios sebanyak yang saya bisa.

Terima kasih

Saya pikir ada banyak frustrasi yang menumpuk, karena kami tidak dapat menggunakan plugin tertentu (misalnya adaptor cache axios) kecuali kami menurunkan versi dan mengunci Axios di v0.18, atau menggulung versi kami sendiri (tidak terawat) dan menerapkan perbaikan di sana .

Ini telah terjadi selama beberapa bulan sekarang, dan saya pikir semua orang hanya ingin melihat setidaknya beberapa perbaikan dirilis.

Apakah tidak mungkin untuk mem-porting beberapa perbaikan yang saat ini diterapkan dan merilis 0.19.x sehingga setidaknya kita dapat menggunakan basis kode terbaru? Jika Anda berniat untuk melakukan 120 pull request lagi, saya khawatir kita akan menunggu lama sampai kita melihat 0,20 atau v1.0.

Saya pribadi akan memilih pendekatan yang lebih bertahap, jika memungkinkan.

@adamreisnz yakin saya akan memilih peningkatan juga tetapi ada banyak yang rusak dari 0.18.x ke 0.19.x dan idenya adalah untuk mencoba membuat rilis 0.20.0 stabil dengan beberapa hal yang paling mendesak dalam rilis itu. Kami hanya memiliki 60 permintaan tarik yang tersisa, saya telah mengerjakan sisanya dan beberapa dari 60 itu ditandai sebagai wip atau v1 .

Saya tahu ini sudah lama tetapi saya ingin melakukannya dengan benar kali ini dan tidak hanya melepaskan dan menghancurkan lebih banyak hal karena pada titik ini sebagian besar mungkin. Juga build akan membutuhkan pengujian yang tersebar luas sebelum go public. Saya merasa frustrasi tetapi jika kami tidak membuatnya stabil dan memperbaiki banyak regresi, kami dapat merilis sejumlah kenaikan, dan masih duduk dengan lebih dari 200~ masalah dan 60~ permintaan tarik yang hanya duduk di sana menjadi basi, serta Axios yang masih sangat rusak, bahkan mungkin lebih rusak.

Selain itu, saya tidak mengontrol rilis saat ini dan ketika saya mulai membantu, saya berjanji untuk mengumpulkan build yang akan memperbaiki regresi dan masalah paling mendesak serta tidak merusak apa pun yang berfungsi sebelumnya. Saya menganggap ini cukup serius dan ingin melakukan itu.

Namun saya dapat mencoba dan mendapatkan rilis 0.18.x dengan masalah keamanan dll diperbaiki jika itu adalah sesuatu yang akan membantu?

Namun saya dapat mencoba dan mendapatkan rilis 0.18.x dengan masalah keamanan dll diperbaiki jika itu adalah sesuatu yang akan membantu?

Itu akan luar biasa.

PS: Kami semua menghargai kerja keras yang Anda lakukan dengan memelihara paket yang rumit untuk banyak proyek web. 😊

Namun saya dapat mencoba dan mendapatkan rilis 0.18.x dengan masalah keamanan dll diperbaiki jika itu adalah sesuatu yang akan membantu?

Ya saya setuju, itu pasti akan dihargai.

Jika Anda memerlukan bantuan untuk menguji beberapa hal baru, beri tahu saya bahwa saya akan terbuka untuk melakukannya.

@adamreisnz bisakah Anda menguji cabang ini: 0.20.0-beta.1

Saya bisa ya, akan mencoba untuk beralih ke cabang itu akhir pekan ini untuk salah satu proyek kami.

@jasonsaayman sejauh ini bagus, 0.20.0 tampaknya berfungsi dengan baik 👍

Sepertinya, masalah bisa ditutup sekarang

Menutup setelah menerima umpan balik bahwa ini sekarang berfungsi sebagaimana mestinya di bawah rilis baru.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat