Axios: تعيين baseURL في المعترضات لا يعمل.

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

ملخص

تعيين baseURL في المعترضات لا يعمل.

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

مفهوم

  • إصدار أكسيوس: على سبيل المثال: v0.16.2
  • البيئة: على سبيل المثال: العقدة vv8.0.0 ، الكروم 59.0.3071.86 ، macOS 10.12

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

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

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

لكنها لا تعمل. يؤدي تعيين افتراضي عام مثل هذا إلى:
axios.defaults.baseURL = 'https://example.com';
كما يفعل تمرير التكوين مع الطلب:
axios.post('/extra', { baseURL: 'https://example.com' })

في كلتا الحالتين ، يكون حقل "url" للتكوين هو " https://example.com/extra " ، ولكن تعيين baseURL في المعترض يقوم فقط بتحديث "config.baseURL". أعني أنه من المنطقي أن تقوم بتحديث هذا الحقل حرفيًا ، ولكن سيكون من الجيد إذا تم تحديث حقل عنوان url أيضًا أو على الأقل مذكور في المستندات (ويفضل أن يكون ذلك بحروف كبيرة غامقة) أن إعداد baseURL في اعتراض هو عديم الفائدة / غير مستحسن.

@ Baoyx007 يمكنك دائمًا تغيير قيمة "url" في التكوين يدويًا

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

أو عند كل طلب

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

عقدة v7.10.0
أكسيوس v0.16.12

ال 3 كومينتر

انظر إلي الافتراضيات المخصصة للمثيلات axios.all ليست وظيفة # 948 عملي العادي فقط كل شيء ليس وظيفة

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

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

لكنها لا تعمل. يؤدي تعيين افتراضي عام مثل هذا إلى:
axios.defaults.baseURL = 'https://example.com';
كما يفعل تمرير التكوين مع الطلب:
axios.post('/extra', { baseURL: 'https://example.com' })

في كلتا الحالتين ، يكون حقل "url" للتكوين هو " https://example.com/extra " ، ولكن تعيين baseURL في المعترض يقوم فقط بتحديث "config.baseURL". أعني أنه من المنطقي أن تقوم بتحديث هذا الحقل حرفيًا ، ولكن سيكون من الجيد إذا تم تحديث حقل عنوان url أيضًا أو على الأقل مذكور في المستندات (ويفضل أن يكون ذلك بحروف كبيرة غامقة) أن إعداد baseURL في اعتراض هو عديم الفائدة / غير مستحسن.

@ Baoyx007 يمكنك دائمًا تغيير قيمة "url" في التكوين يدويًا

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

أو عند كل طلب

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

عقدة v7.10.0
أكسيوس v0.16.12

ثابت في # 950

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

القضايا ذات الصلة

altruisticsoftware picture altruisticsoftware  ·  3تعليقات

tbaustin picture tbaustin  ·  3تعليقات

emaincourt picture emaincourt  ·  3تعليقات

achingbrain picture achingbrain  ·  3تعليقات

Shu-Ji picture Shu-Ji  ·  3تعليقات