Axios: لا يتم دمج معلمات الطلب مع معلمات المثيل

تم إنشاؤها على ٣١ مايو ٢٠١٩  ·  83تعليقات  ·  مصدر: axios/axios

صف الخلل

لا يتم دمج معلمات الطلب المحددة مع المعلمات الافتراضية للمثيل.

لإعادة إنتاج

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

ما يحدث هو أن الكائن معلمة الطلب يتجاوز كائن المعلمة الافتراضي للمثيل. لم يعد المثيل يحتوي على معلمة استعلام q .

سلوك متوقع

وفقًا للمستندات ، تم دمج جميع خيارات التكوين. https://github.com/axios/axios#instance -methods

توقعت أن يحتوي الطلب على كل من المعلمات q و page . هذه هي الطريقة التي كان يعمل بها في الإصدار 0.18.0 ، وهذا ما لاحظته.

بيئة:

  • إصدار Axios: 0.19.0
  • نظام التشغيل: 10.14.5 (18F132)
  • المتصفح: Node Express و Chrome
  • المتصفح: Node 10.15.0 ، إصدار Chrome 74.0.3729.169 (الإصدار الرسمي) (64 بت)
review

التعليق الأكثر فائدة

في انتظار الإصلاح الرسمي 😭

ال 83 كومينتر

إليك مثال قيد التشغيل - https://runkit.com/philipbjorge/axios-regression

وجود مشكلة مماثلة مع رموز المصادقة المستندة إلى الجلسة الخاصة بنا والتي لم يتم دمجها أيضًا.

أعتقد أن الإصلاح بسيط مثل نقل params إلى العقار إلى قسم deepMergeProperties . الفرق هنا: https://github.com/axios/axios/compare/8d0b92b2678d96770304dd767cd05a59d37f12cf...zackseuberling : zs-fix-merge-params

zackseuberling هل يمكنك تقديم طلب سحب لهذا؟

لدي نفس المشكلة.

تجتاز اختبارات أفترضه هو السلوك الصحيح) في # 2196

نأمل أن يتم إصدارها قريبًا ، فقد جعلتني المشكلة مزعجة جدًا

وجود نفس المشكلة. متى سيتم إصلاحه؟

نفس الشيء هنا wphestiraid 😬

الرجوع إلى 0.18.1 إصلاحه لي كحل بديل! تم إصلاح الثغرة الأمنية.

serranoarevalo أعتقد أنه يمكننا استخدام 0.18.1 : ابتسم:

يبدو أن هذا يحدث أيضًا مع method ، إذا كان محددًا فقط في المكالمة create وليس request . أخذني طوال اليوم لمعرفة ذلك ، بالتأكيد تغيير جذري. (هل يجب أن تكون هذه مشكلة منفصلة أم أنها جزء من نفس المشكلة العامة؟)

نفس المشكلة هنا

أي أخبار عن هذا؟ متى سيتم إصلاحه؟

أي أخبار عن هذا؟ متى سيتم إصلاحه؟

فقط استخدم v0.18.1 في الوقت الحالي. ✈️

هذا ما أستخدمه ، لكنني بحاجة إلى الترقية إلى v0.19.0 بمجرد إصلاح ذلك بسبب مشكلات الأمان

هذا ما أستخدمه ، لكنني بحاجة إلى الترقية إلى v0.19.0 بمجرد إصلاح ذلك بسبب مشكلات الأمان

أي نوع من القضايا الأمنية؟ v0.18.0 لديه مشاكل أمنية ، v0.18.1 بخير.

لا يزال NPM يبلّغ عن 0.18.1 باعتباره ضعيفًا أثناء عملية التدقيق - من المحتمل أن يكون ذلك أمرًا محبطًا.

إذا كنت بحاجة إلى استخدام axios 0.19 مثلي ، فيمكنك إدارة المعلمات مثل هذه ويجب أن تعمل بشكل جيد في الوقت الحالي كحل بديل .

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

في انتظار الإصلاح الرسمي 😭

تصويت مؤيِّد. أمضيت للتو فترة الظهيرة في مطاردة هذا الخطأ وأتيت إلى هنا لكتابة مشكلة.

هل هناك أي تقدم لتقديم الإصلاح؟

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

يوضح كود v0.19.0 أن mergeConfig(axios_instance.defaults, config)
يتم استخدام config.params الطلب فقط.

لماذا نسخة ثانوية غير متوافقة مع الإصدار السابق؟
لا يوجد اختبار لهذا؟
يجب أن اسأل.

magicdawn أعتقد أنهم Plsemilyemorehouse ، ساعدنا في https://github.com/axios/axios/pull/2196 🙏!

أى اخبار؟ حصلت على نفس الخطأ ثم الترقية إلى أحدث إصدار.

ما هي المشكلة هل سيتم إصلاح هذا على الإطلاق !!

استغرقت بعض الوقت لأجد هذه المشكلة ... مزعجة. في انتظار الإصلاح أيضا.

قد يكون اختراقًا ، ولكن يمكنك أيضًا تصحيح طريقة get لمثيل axios الذي تم إنشاؤه:

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

لقد قمت بلف نسخة الإنشاء وقمت بتصحيح جميع الطرق مثل هذا:

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],
];

لكل من يبحث عن حل بديل ، يمكنك استخدامه (قد لا ينطبق على الجميع):

npm i qs

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

janpantel أنا فضولي ، لماذا لا تقوم فقط بتعديل المعلمات؟

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

شكرا janpantel أعتقد أنه يعمل بهذه الطريقة ، كما أنه أنظف من البدائل الأخرى

لدينا خطأ مشابه جدا.

في الواقع ، لا يمكننا تحديد أي مثيل params مع axios.create() .
في هذه الأثناء تراجعنا إلى طلب اعتراض ...

نفس الشيء بالنسبة لي. دفعني للجنون اليوم! كل شيء كان يعمل بشكل جيد. ثم فجأة كنت أتلقى مشكلات المصادقة ومشكلات CORS؟! يارج ...

لقد أدركت أنني قمت بالتحديث من الإصدار 18 إلى الإصدار 19 ثم ورثت هذا الخطأ على ما أعتقد. يبدو أن المعلمات "الافتراضية" التي حددتها في تعريف المثيل (معلمة مفتاح المصادقة القديمة للمدرسة) لم يتم دمجها عندما اتصلت بهذا المثال لاحقًا باستخدام معلمات جديدة ، فإن المعلمات الجديدة قتلت القيم الافتراضية :(.

خفضت إلى الإصدار 18 حلها. آمل أن يصلحوه قريبًا ، فأنا أحب جميع الوحدات النمطية الخاصة بي محدثة! : ص

أنتقل إلى استخدام طلب umi في العقدة والمتصفح الآن.
حتى الان جيدة جدا. 😄

نفس المشكلة لا تزال قائمة منذ عام 2020.
هل تعمل بالشكل المصمم أم متى يمكن حل هذه المشكلة؟

إصدار Axios: 0.19.0

شكرا لتقديم مثل هذا lib مفيد!

لا يزال لدى v0.19.1 هذا الخطأ 😞

أصلح هذا بالفعل. هذا أمر مزعج حقًا. استغرق مني 15 دقيقة لمعرفة هذا الخطأ.

نفس المشكلة هنا باستخدام [email protected] . استخدام الاعتراضات كحل بديل.

لا تزال تواجه نفس المشكلة مع

تثبيت npm - حفظ [email protected]

وجود هذه القضية أيضا. ارجو الاصلاح

نوع من الدراما التي لا تنتهي

ليس الأمر كذلك أنه لن يتم دمج معلمات المثيل مع معلمات الاستدعاء. لا تدخل معلمات المثيل في معاملات الطلب على الإطلاق. إذا قمت بإنشاء مثيل وحدد المعلمات ، فلن يتم العثور عليها مطلقًا في أحد طلبات get الخاصة بي.

كان الرجوع إلى إصدار أقدم هو الخيار الأسهل من تحديد المعلمات مع كل استدعاء.

لماذا تم إغلاق هذه القضية؟ كما ذكر renestalder ، في الإصدار الأخير ، لم تظهر أي من معلمات المثيل في أي طلب مما يجعل طريقة create عديمة الجدوى إلى حد ما.

تم إغلاقه لأنه تم إصلاحه في # 2656 ، ولكن لا يوجد إصدار له حتى الآن.

لقد استخدمت المعترض كحل بديل أيضًا ، اقترح شيء مثل cheelahim :

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

لكن ما زلت في انتظار إصدار جديد لإصلاح هذا الخطأ.

الحصول على & بارامز أكسيوس

      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

واو! بعد عام تقريبًا!

لا يزال الخطأ موجودًا! لا أصدق ......

تم دمج الإصلاح في # 2656 ولكن لم يتم قطع نسخة منه بعد

فقط قم بالرجوع إلى 0.18.0

لماذا هو مغلق؟

لسوء الحظ ، تم إصدار fetch بمجرد أن تحتاج إلى أحداث التقدم أو دعم الإلغاء.

ما عليك سوى تثبيت إصدارك على ^0.18.1 .

techouse الانتقال إلى البدائل هو الحل الأفضل.

لطالما أحببت استخدام الأكسيوس. لكن فكرة أن هذا الإصلاح كان موجودًا منذ فترة طويلة ولا يمكن لأحد أن يديره إلى إصدار ما هي مجرد مزحة حان الوقت للمضي قدمًا. أو اجعل شخصًا ما يدير هذا الأمر الذي يريد بالفعل تطوير المنتج.

جون البرغيني
مدير التكنولوجيا
[email protected]
ا. 802-323-4558 | ج. 802-323-4558 | www.legacyresearch.com http://www.legacyresearch.com


من: Evgeny [email protected]
تاريخ الإرسال: الخميس ، 23 أبريل 2020 ، الساعة 10:59:32 صباحًا
إلى: axios / axios [email protected]
نسخة إلى: Jon Alberghini [email protected] ؛ التعليق [email protected]
الموضوع: Re: [axios / axios] لم يتم دمج معلمات الطلب مع معلمات المثيل (# 2190)

techouse https://github.com/techouse الانتقال إلى البدائل هو الحل الأفضل.

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو قم بعرضها على GitHub https://github.com/axios/axios/issues/2190#issuecomment-618445756 ، أو قم بإلغاء الاشتراك https://github.com/notifications/unsubscribe-auth/AF6OZWIPRREAQP5OGY437X3ROBJVJANCNAFSQ4HR .

أعتقد أنه مغلق لأنه تم دمج الإصلاح ومن المفترض أن يتم إصداره في الإصدار v0.20.0. انظر هنا

نفس المشكلة هنا ، آمل أن يتم إصلاحها قريبًا!

+1. الرجوع إلى الدرجة الأدنى في الوقت الحالي. سمه.

khastationraphaelbadawijonathanalberghinitechouseAndyOGo

البدائل:

تضمين التغريدة
لسوء الحظ ، تم إصدار fetch بمجرد أن تحتاج إلى أحداث التقدم أو دعم الإلغاء .

AndyOGo يمكن تنفيذه مثل https://javascript.info/fetch-progress

لقد وجدت طريقي للخروج باستخدام بعض التفكيك لفصل المعلمة الرئيسية. رمز مؤقت بالتأكيد ، ولكن نظرًا لأن الدمج قد تم بالفعل و 0.20.0 قيد التنفيذ ، فأنا واثق حقًا. لا يزال Axios طريقي للذهاب ، حتى لو كنت من ذوي الخبرة في الجلب (). عادة ما تكون الأمور هزيلة جدًا مع Axios ؛-)

شكراmahnunchik
على الرغم من أنني أتحدث عن أحداث التقدم للتنزيل والتحميل !

شكرا على سؤالكbdrtsky
بشكل رئيسي لهذه الأسباب:

  • يحدد fetch عدة انحدارات مقارنة بـ XMLHttpRequest
  • يصبح الإلغاء مهمًا بمجرد إنشاء خدمات على نطاق واسع
  • لقد أنشأت برنامجًا لتحميل الملفات ، لذلك أحتاج إلى معالجة تقدم أكثر تعقيدًا

تم إغلاق هذا بسبب الإصلاح الذي تم تعيينه بالفعل لإصدار 0.20. نحن نعمل حاليًا على هذا الإصدار ، حيث أن النقطة 0.20 هي إصلاح الانحدارات وإطلاق Axios مستقرًا مرة أخرى.

هذا العمل قيد التقدم ، للحصول على التحديثات تحقق من مشروع 0.20.

هل من الممكن وضعها في نسخة التصحيح 0.19.3؟ لا يمكن إغلاق العيب إذا لم يتم إصلاحه في نفس الإصدار الثانوي ...

لقد أعدت فتحه ولكننا لن نصدر 0.19.3. نود الحصول على الاستقرار في الإصدار 0.20 الذي يزيل كل الانحدار من 0.18.0 إلى 0.19.2.

يبدو أن الحل الوحيد الممكن هو تقليله.

متى نتوقع هذا الإصدار 0.20 بعيد المنال؟ هل هناك نسخة تجريبية يمكننا استخدامها في الوقت الحالي؟

adamreisnz أنا أعمل على إصدار 0.20 ولكن لا يزال هناك حوالي 60 طلب سحب فردي (تم خفض هذا من 120 طلبًا فرديًا) ، وبعضها قديم جدًا ومتنوع من العمل في التحقق والتأكد من أن طلب السحب هذا إما لا يزال ذا صلة ، لا تقدم تغييرًا فاصلًا ، أو لديك اختبارات ، ولا تقم بتضمين الملفات المترجمة وما إلى ذلك ، فهو عمل. أحاول أن أحاول إدخاله في الإصدار المسبق بحلول يوليو في أحسن الأحوال. نود المساعدة في اختبار هذا الإصدار لأننا نريد حقًا الحصول عليه بشكل صحيح قبل أن نعمل على الإصدار 1.

إنها مشكلة مزعجة ، آمل أن يتم إصلاحها ، وأن يتم الحفاظ عليها لفترة طويلة.

تريد الحصول عليها بشكل صحيح قبل أن نعمل على v1

هناك مساحة كبيرة في 0.x لعمل إصدارات إضافية قبل 1.0.0 ؛ ليس عليك حشر كل شيء في الإصدار التالي. في الواقع ، يمكن للمرء أن يجادل في أن ذلك من شأنه أن يجعل تعقب الأخطاء الجديدة المحتملة أكثر صعوبة.

markcarver بالتأكيد يمكننا مع ذلك ، يُنظر إلى SemVer PublicAPI . مع الإصدار 0.20.0 ، نرغب في تحقيق الاستقرار وإصلاح معظم الانحدارات من الفرع 0.19.x مثل بعض المشكلات المعروضة في هذا الفرع بالإضافة إلى العمل على الأخطاء التي تعتبر مكاسب سهلة.

نحتاج أيضًا إلى مسح تراكم طلبات السحب في نفس الوقت. من الصعب جدًا التعامل مع 120 طلب سحب غريب حيث كان بعضهم من عام 2017. أعدك بأننا سنصل إلى هذه المشكلة ، لن أذهب إلى أي مكان وسأدعم وأعمل على Axios بقدر ما أستطيع.

شكرا

أعتقد أن هناك قدرًا كبيرًا من الإحباط يتراكم ، لأننا لا نستطيع استخدام مكونات إضافية معينة (مثل محول ذاكرة التخزين المؤقت axios) ما لم نقم بالرجوع إلى إصدار أقدم وثبتنا في Axios في الإصدار 0.18 ، أو قمنا بإصدار نسختنا (التي لم تتم صيانتها) وقمنا بتطبيق الإصلاح هناك .

لقد كان هذا هو الحال لبضعة أشهر حتى الآن ، وأعتقد أن الجميع حريصون فقط على رؤية بعض الإصلاحات التي تم إصدارها على الأقل.

أليس من الممكن نقل بعض الإصلاحات المطبقة حاليًا وإصدار 0.19.x حتى نتمكن على الأقل من استخدام أحدث التعليمات البرمجية؟ إذا كنت تنوي تنفيذ 120 طلب سحب آخر ، أخشى أننا سننتظر وقتًا طويلاً حتى نرى 0.20 أو v1.

سأختار شخصيًا نهجًا أكثر تدريجيًا ، إن أمكن.

adamreisnz متأكد من أنني wip أو v1 .

أعلم أنه قد مر وقتًا طويلاً ، لكني أرغب في تصحيح الأمر هذه المرة وليس مجرد إطلاق المزيد من الأشياء وكسرها في هذه المرحلة وهو أمر ممكن إلى حد كبير. كما سيحتاج البناء إلى اختبار انتشار واسع قبل طرحه للعامة. أشعر بالإحباط ، ولكن إذا لم نحصل على الاستقرار وإصلاح الكثير من الانحدارات ، فيمكننا إطلاق أي عدد من الزيادات ، وما زلنا نواجه أكثر من 200 مشكلة و 60 طلب سحب لا يزال قائماً ، بالإضافة إلى لا يزال أكسيوس مكسورًا جدًا ، وربما أكثر تكسرًا.

بالإضافة إلى ذلك ، لا أتحكم في الإصدارات في الوقت الحالي وعندما بدأت في المساعدة ، وعدت بتجميع بنية من شأنها إصلاح الانحدار والمشكلات الأكثر إلحاحًا بالإضافة إلى عدم كسر أي شيء آخر نجح في السابق. أنا آخذ هذا بجدية كبيرة وأود أن أفعل ذلك.

ومع ذلك ، يمكنني محاولة الحصول على إصدار 0.18.x مع أي مشكلات أمنية تم إصلاحها وما إلى ذلك إذا كان هذا أمرًا سيساعد؟

ومع ذلك ، يمكنني محاولة الحصول على إصدار 0.18.x مع أي مشكلات أمنية تم إصلاحها وما إلى ذلك إذا كان هذا أمرًا سيساعد؟

سيكون هذا رائعا.

ملاحظة: نقدر جميعًا العمل الشاق الذي تقوم به من خلال الحفاظ على حزمة معقدة للعديد من مشاريع الويب. 😊

ومع ذلك ، يمكنني محاولة الحصول على إصدار 0.18.x مع أي مشكلات أمنية تم إصلاحها وما إلى ذلك إذا كان هذا أمرًا سيساعد؟

نعم أنا أتفق ، سيكون ذلك بالتأكيد موضع تقدير.

إذا كنت بحاجة إلى أي مساعدة في اختبار بعض الأشياء الجديدة ، فأعلمني أنني سأكون منفتحًا على القيام بذلك.

adamreisnz هل يمكنك اختبار هذا الفرع: 0.20.0-beta.1

يمكنني نعم ، سأحاول التحول إلى هذا الفرع في نهاية هذا الأسبوع لأحد مشاريعنا.

jasonsaayman جيد حتى الآن ، يبدو أن 0.20.0 يعمل بشكل جيد 👍

على ما يبدو ، يمكن إغلاق المشكلة الآن

يتم الإغلاق بعد تلقي التعليقات بأن هذا يعمل الآن كما ينبغي في الإصدار الجديد.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات