Axios: تعيين رمز / حالة لـ "خطأ في الشبكة"

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

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

في هذه الحالة ، تؤدي طلبات شبكة axios إلى حدوث خطأ يختلف عن جميع أخطاء Axios الأخرى ، كما تمت مناقشته هنا: https://github.com/mzabriskie/axios/issues/204

في الكود الخاص بي ، يبدو أن الطريقة الوحيدة لاكتشاف هذا الخطأ هي التحقق من رسالة err.message:
if (err.message === "Network Error"){/*tell user the server is down*/}

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

سيكون من الرائع أن يتم تعيين حالة err.status أو err.code (أو خطأ. ؟؟؟) على بعض القيمة الموثقة التي يمكننا التحقق منها في التعليمات البرمجية الخاصة بنا.

هل هناك طريقة أخرى لاكتشاف هذا السيناريو الذي فقدته؟
شكرا لكم جميعا!

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

أواجه هذه المشكلة. هل من الممكن ان يساعدني احد من فضلكم؟

استجابة الخادم هي 401 لكن أكسيوس تعطيني هذا:

خطأ -> "خطأ في الشبكة"
error.response -> undefined
error.status -> غير محدد

ال 69 كومينتر

أعتقد أنك محق. سيكون رمز الحالة منطقيًا.

كما قال أحدهم في # 204 ، هناك بعض الحالات التي يستحيل فيها اكتشاف أخطاء الشبكة في المتصفح ، لذلك يستجيب Axios بخطأ عام ( new Error('Network error') ). إذا كنت تريد تمييزها عن الاستجابات السيئة (رمز الحالة! == 2xx أو فحص مخصص) أعتقد أن أفضل طريقة هي التحقق من خاصية status بدلاً من رسالة الخطأ. على سبيل المثال:

axios.request(options).catch(function(error) {
  if (!error.status) {
    // network error
  }
});

أعتقد أن تعيين رمز حالة مخصص سيكون فكرة سيئة (قد يتسبب في مزيد من الارتباك) ولن يساعد تعيين خاصية معينة على الإطلاق لأن لدينا حالة خطأ واحدة فقط.

بالطبع في Node.js أسهل لأن لديك حق الوصول إلى الخطأ الفعلي ويمكنك التحقق وفقًا لوثائق Node.js.

آه ، لذا فإن أي خطأ ناتج عن مكالمة Axios مضمون إما لـ 1) له حالة ، أو 2) يكون خطأ شبكة عام؟ أعتقد أن هذا جيد بما فيه الكفاية.

حتى الآن ، لا يمكنني الحصول على رمز الخطأ مثل 404500 .. ، ما زلت أتلقى خطأ في الشبكة. كيفية حل هذا؟
example.post ('/ foo'، {request_id: 12345})
.then (function (response) {})
.catch (وظيفة (خطأ) {
console.log (خطأ) ؛ // خطأ في الشبكة
console.log (error.status) ؛ // غير معرف
console.log (error.code) ؛ // غير معرف
}) ؛

خطأ في الشبكة يعني أن Axios لا يمكنها الاتصال بخادمك على الإطلاق ، لذا لا يمكنها الحصول على أي رمز خطأ من الخادم. ربما جربها باستخدام أداة أخرى (curl ، أو ساعي البريد ، أو متصفح) للتأكد من أنه يمكنك الاتصال بها؟

يمكنني الاتصال بخادمي ، فهو في الواقع يُرجع رمز الخطأ 404 ومع بعض استدعاءات API الأخرى ، يُرجع خادم 500 خطأ داخلي في الخادم ، لكن ما زلت لا أستطيع الحصول على رمز خطأ الشبكة من خلال البرمجة النصية (على سبيل المثال ، console.log ( error.status) ؛ // غير محدد).

إنه بـ error.response.status .

أواجه هذه المشكلة. هل من الممكن ان يساعدني احد من فضلكم؟

استجابة الخادم هي 401 لكن أكسيوس تعطيني هذا:

خطأ -> "خطأ في الشبكة"
error.response -> undefined
error.status -> غير محدد

عندما يكون الخطأ هو "خطأ في الشبكة" ، فهذا يعني أن Axios coud لا يتصل بخادمك ، أو لسبب ما لا يتلقى الاستجابة من الخادم الخاص بك. بحيث لا يتم تحويل الخطأ 401 إلى أكسيوس. ربما تنشر سؤالًا مع بعض التعليمات البرمجية النموذجية على StackOverflow؟

ركض في هذا عند استخدام AWS API-Gateway. بالنسبة لأي شخص يرى نفس المشكلات ، فهذه مشكلة مع أخطاء 4xx (في حالتي 401) لا تستجيب مع رؤوس CORS. أمضيت ساعات في استكشاف هذه المشكلة اللعينة! شكرًا @ jonathan-stone على توجيه تحري الخلل وإصلاحه في الاتجاه الصحيح.

codygreen ما زلت أواجه هذه المشكلات https://forums.aws.amazon.com/message.jspa؟

هل وجدت حلا؟

هل لدى أي شخص أي حلول لهذه المشكلة؟

كانت مشكلتي مع Jest + Axios. لقد قمت بحلها بإضافة هذا إلى الحزمة الخاصة بي. json:

"jest": {
    "testEnvironment": "node"
}

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

axios.request(options).catch(function(error) {
  if (!error.response) {
    // network error
  } else {
    // http status code
    const code = error.response.status
    // response data
    const response = error.response.data
  }
});

هل وجد أي شخص أفضل حل حول هذا؟ الناس أكسيوس يصدرون بعض الضوضاء :(

لقد تلقيت هذا الخطأ أيضًا اليوم ، ولا أعرف ما هي المشكلة ، هذا هو النص الخاص بي:

js var url = "http://localhost:8000/"; Axios.get(url).then(function(response){ alert(response) }).catch(function(error){ alert(error) });

http: // localhost : 8000 / يعرض استجابة JSON ، وهذا لا يعمل مع المضيفات الأخرى

قد يكون خطأ كور.

السطر 87 ، تم ضبطه على "خطأ في الشبكة" في المحول xhr؟ كيف يمكن تغيير هذا حتى يمكن اكتشاف الخطأ؟
https://github.com/axios/axios/blob/d7f021b8d4cc50bfa0653011bc02452d234d1255/lib/adapters/xhr.js#L84 -L91

سيئتي ، إنها ليست مشكلة ولكن السلوك المتوقع بسبب أمان المتصفح. تتلقى استجابات خطأ XHR الآن ProgressEvent على أكواد حالة الخطأ.

لدي نفس المشكلة. أعتقد أنها مشكلة مع CORS. هل وجد أي شخص حلا جيدا لهذا؟

codygreen هل تمكنت من إصلاح مشكلتك مع API Gateway؟ لا يمكنني حتى معرفة رمز حالة الاستجابة لمساعدتي في تصحيح الأخطاء بشكل أكبر.

نفس المشكلة العامة هنا. بالنسبة لي كان بالتأكيد CORS. كان المتصفح يُجري طلبات OPTIONS إلى الخادم ولم يكن لدي إعداد معالج لهم (في العقدة). أكسيوس ستكمل الطلب (الفاشل) بنجاح ولكن باستجابة غير محددة

      return axios.httpClients.server.post('/someUrl, {
        someData:some_data
      }).then(response => {
        console.log(response);
        //the following errors out because response is undefined
        if (response.data && response.data.success === true) {
        }
      }).catch(err => {
           //catch never triggered
            console.log(err)
      });

ما هو كود ردك على الرد؟ إذا كان خطأ في الشبكة ، فعند استخدام متصفحات Fetch API ، ستسجله في وحدة التحكم ولكن لن تمرره إلى JavaScript لأسباب أمنية ومن ثم يكون الجسم فارغًا. راجع FETCH STANDERS ، إذا كنت تريد الوصول إلى أخطاء الشبكة للاستجابة ،

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

لست متأكدًا مما إذا كان هذا ينطبق على الحالات الأخرى ، ولكن إليك كيفية حل هذه المشكلة نفسها (بالنظر إلى أننا نتحدث عن CORS ).

على جانب الواجهة الأمامية ، تأكد من تمرير headers كمعامل في طلبات PUT أو POST :

const axiosParams = {
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Accept': 'application/json',
  },
};

axios.put(`${api.url}/like`, axiosParams)
  .then((response) => {
    // ...
  });

وعلى الجانب الخلفي ، تأكد من أنك تستخدم CORS مع Express:

// server.js
const express = require('express');
const app = express();

var cors = require('cors'); // Yep, you need to install this
app.use(cors()); // Works 🎉

الحكام: هنا وهنا .

يا رفاق ، أنا أيضًا أعاني في هذه المشكلة من أجل الإقلاع عن التدخين أثناء. لكنني اكتشفت مشكلة إنشاء شبكة منشورات Axios الخاصة بي على جهاز Android الآن. سبب خطأ شبكة Axios هو أن بيانات النموذج التي قمت بتمريرها إلى Axios تحتوي على نوع خاطئ من كائن البيانات على ما أعتقد. لقد قمت بتضمين كائن صورة (كائن ImagePicker من Expo) كأحد معلمات بيانات النموذج التي لا تقبلها Axios على ما أعتقد. قد يتلقى Axios سلسلة فقط أو عدد عشري أو int أو صورة كمعلمة. الصورة لا يمكن أن تمر كمعلمة ، فهي ليست نوعًا من الصور ، إنها كائن أصلي متفاعل ، لقد قمت بإزالتها وتضمين حقل صورة كمعلمة عن طريق تعيين image.uri إلى قيمة param ثم تعمل. آمل أن يساعد هذا بعض الأشخاص الذين قد يواجهون نفس المشكلة التي كنت أواجهها من قبل.
حذف بعض بيانات النموذج الخاصة بك واحدًا تلو الآخر عند اختبار خطأ شبكة Axios ، ستكتشف أيهما هو سبب المشكلة.

~codygreenhammadzz لم تجد حلا لهذه مع الأمازون بوابة API؟ ~

تحديث: إذا تعثر أي شخص في هذا باستخدام API Gateway و CORS ، فستحتاج إلى إضافة رأس استجابة access-control-allow-origin إلى ردودك.

كما قال أحدهم في # 204 ، هناك بعض الحالات التي يستحيل فيها اكتشاف أخطاء الشبكة في المتصفح ، لذلك يستجيب Axios بخطأ عام ( new Error('Network error') ). إذا كنت تريد تمييزها عن الاستجابات السيئة (رمز الحالة! == 2xx أو فحص مخصص) أعتقد أن أفضل طريقة هي التحقق من خاصية status بدلاً من رسالة الخطأ. على سبيل المثال:

axios.request(options).catch(function(error) {
  if (!error.status) {
    // network error
  }
});

أعتقد أن تعيين رمز حالة مخصص سيكون فكرة سيئة (قد يتسبب في مزيد من الارتباك) ولن يساعد تعيين خاصية معينة على الإطلاق لأن لدينا حالة خطأ واحدة فقط.

بالطبع في Node.js أسهل لأن لديك حق الوصول إلى الخطأ الفعلي ويمكنك التحقق وفقًا لوثائق Node.js.

إذا كنت هنا من Google ، فلاحظ أن واجهة برمجة التطبيقات هذه مهملة. هذا من 2016 ، v <0.13.

تريد التحقق من error.response عندما يستجيب الخادم ، و error.response === undefined لحالة عدم الاتصال والحالة الخاصة error.code === 'ECONNABORTED' للمهلة.

تحديث: إذا تعثر أي شخص في هذا باستخدام API Gateway و CORS ، فستحتاج إلى إضافة رأس استجابة إلى ردودك:

access-control-allow-origin: *

بالتأكيد لا تفعل هذا. قم بتعيين الأصول وفقًا لذلك بدلاً من * .

بالنسبة لي ، كانت مشكلة cors ، إذا كنت تستخدم laravel ، وقمت بتحديد ملف

 ->middleware(['auth:api'])

يجب عليك إضافة جميع البرامج الوسيطة الأخرى التي تحتاجها إلى هذا المسار بشكل صريح ، فهو ليس موروثًا

->middleware(['auth:api','cors']);

لقد واجهت أيضًا هذه المشكلة ، استخدم عنوان IP المحلي الخاص بك بدلاً من المضيف المحلي (على سبيل المثال 10.0.0.12:8083). لقد نجحت معي.

لذلك إذا كان لديّ الخيار الصحيح ، يبدو أن الحالة 0 من طلب axios تظهر في بعض الحالات. ولكن لا يمكن تحديد الحالة التي تمت مواجهتها برمجيًا بالضبط.

تتضمن هذه الحالات عندما يفشل طلب الاختبار المبدئي لـ CORS ، وبالتالي لا تتم محاولة الطلب الفعلي مطلقًا. وبسبب هذا ، فإن حالة 404 لن تكون مناسبة.

يحتاج شخص ما إلى شراء joelnet a بيرة. هذا أنقذ يومي:

https://github.com/axios/axios/issues/383#issuecomment -308606088

قد يعاني الأشخاص الآخرون من مشاكل مختلفة ، لكن ذلك نجح معي.

أتلقى هذا الخطأ بشكل متقطع. أظن أنها ليست قضية CORS.
api / الخادم الخاص بي هو خادم .net.
أي شخص آخر يواجه هذا بشكل متقطع؟

كنت أواجه هذا الخطأ لأنني لم أحدد HTTP أو https. بشكل أساسي ، يتسبب الكود نفسه في حدوث خطأ في البروتوكول غير المحدد. يجب التعامل مع هذا أو في تعريف الخطأ ، يجب تضمينه.

كما قال @ jonathan-stone ، لا أعتقد أن هذا يمكن تصحيحه ، لأن Axios ببساطة لا تعرف ما حدث. إنه مثل إرسال صديقك إلى Funyuns ويقول إن المتجر مغلق. تقول "مفتوح دائمًا" - لماذا تم إغلاق المتجر. هل أغلقوا نهائياً (404)؟ هل شخص مريض (500)؟ هل نفد المخزون لديهم (503)؟ لا يعلم ، لقد تم إغلاقهم للتو (خطأ في الشبكة)!

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

إذا أعدت محاولة الطلب (باستخدام retry-axios من # 164) يمكنني الحصول على البيانات أو ربما خطأ حقيقي إذا كان هناك خطأ ما في الخادم AVAILABLE.

لحل المشكلة عليك أن تحدد دائما
Nginx

add_header 'Access-Control-Allow-Origin' * دائمًا ؛

لحل المشكلة عليك أن تحدد دائما
Nginx

add_header 'Access-Control-Allow-Origin' * دائمًا ؛

لا تفعل هذا. لا تفعل هذا

مرحبًا يا رفاق ، لقد قمنا بإعداد حماية لحجم الكيان على وكيلنا ، إنه يُرجع خطأً عامًا ولكني غير قادر على الحصول على رمز الحالة 413 ... هل هذا ممكن بطريقة ما؟

Screenshot 2019-05-07 at 14 19 26

هل جربت الكائن response ؟
axios.get(url).then(stuff => console.log(Object.keys(stuff.response));

ComputerCarl هل تعتقد أن لديه استجابة ناجحة؟ لا أعتقد ذلك لأنه ينتهي بـ catch لكن يمكنني تجربته ...

آسف! كان رأسي في مكان آخر! تحقق من كائن الالتقاط ...catch(err => console.log(Object.keys(err.response));

أكسيوس دوك

لدي في أحد برامجي ؛
err.response.data.message;

التي أرسلتها من Express ؛

app.use(function (err, req, res, next) {
  res.status(err.status || 500);
  // this is err.response.data on Axios client
  res.send({ message: 'my custom error' });
});

ComputerCarl لكن error.response غير محدد ، مثل error.status :) يمكنك رؤيته في لقطة الشاشة ، لدي في console.log بالفعل. فقط error.request هو كائن XMLHttpRequest ، كما ترى

حسنًا .. لا أعرف لماذا تحصل على خطأين (413 بالإضافة إلى CORS). ومع ذلك ، إذا كنت تستخدم Express ، فيجب عليك تمكين CORS ؛

const cors = require('cors');
// ...
app.use(cors());

أيضًا ، كما ذكرت أعلاه ، إذا رفض الخادم طلبك بشكل قاطع ، فلن يعرف Axios سبب الخطأ. في هذه المرحلة ، أشعر بالحيرة وعليك انتظار شخص أكثر ذكاءً للإجابة. :-)

شكرًا ComputerCarl على المحاولة :- D CORS جيد ، لدي الكثير من المكالمات المختلفة لنفس واجهة برمجة التطبيقات في التطبيق وهذه تعمل بشكل جيد. حتى الأخطاء التي تم إرجاعها من API يمكنني التعامل معها بسهولة. تكمن المشكلة في إلغاء هذا واحد فقط على مستوى الوكيل.

لا أعرف ما إذا كان هذا يساعدك ، لكنني أنشأت تطبيقًا كان يعمل على إنشاء وكلاء للطلبات. كان الإطار الذي كنت أستخدمه يلتهم خطأ Express. أخيرًا ، بعد إعادة توجيه الخطأ صراحة res.send({ message: messageFromProxy }); ، تمكنت من رؤية خطأ والتعامل معه على العميل.

حظا طيبا وفقك الله.

@ jonathan-stone قال ، خطأ في الشبكة يعني أن Axios لا يمكنه الاتصال بالخادم الخاص بك على الإطلاق ، لذلك لا يمكن الحصول على أي رمز خطأ من الخادم.

قد يكون هذا سيساعد شخص ما.

error.data ;

@ balwant-sd كما ترى في لقطة الشاشة التي أرسلتها هنا ، يتعرف المتصفح بشكل صحيح على رمز الحالة 413 ، لكن axios لا يتعرف

حتى في علامة تبويب الشبكة يمكنني رؤية 413 رمز حالة ...
Screenshot 2019-06-03 at 15 42 12

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

لذلك يبدو أن هذا الخطأ عبارة عن خطأ CORS تم تكوينه بشكل خاطئ والذي ينعكس فقط على علامة تبويب الشبكة. لدي نفس المشكلة مثل @ ketysek ، ويبدو أن ngnix الخاص بي لا يطبق CORS لهذا الغرض. كما ذكرنا سابقًا ، لن يؤدي الخطأ العام في الشبكة إلى تحويله إلى محاور error.response . هنا أود إلقاء اللوم على الواجهة الخلفية .. أوه انتظر ، لقد فعلت ذلك ...

مرحبًا ، لدي أيضًا نفس المشكلة ، حتى إذا طلبت الحصول على محاور استجابة مناسبة ، فإنها تعرض دائمًا "خطأ في الشبكة" وتنتقل إلى .catch (الوظيفة (خطأ) {}) ؛ على قدم المساواة. هل من احد لديه حل لهذه المشكلة؟

كان لي نفس المشكلة اليوم. تتعلق هذه المشكلة في الغالب بالواجهة الخلفية التي لا تسمح للأصول بطلبات HTTP عبر المواقع. في حالتي ، أنا أستخدم django لذلك قمت للتو بوضع فئة corsheaders على أعلى مستوى ممكن في MIDDLEWARE:
MIDDLEWARE = [ 'corsheaders.middleware.CorsMiddleware', //..etc ]
وأنشأت CORS_ORIGIN_WHITELIST للسماح بأصول معينة فقط:
CORS_ORIGIN_WHITELIST = [ "http://localhost:8081" , //..etc ]
هذا هو لرؤوس django-cors. إذا لم تكن من مستخدمي django ، فيجب عليك التحقق من توثيق وحدة رؤوس cors المفضلة لديك.

كما قال أحدهم في # 204 ، هناك بعض الحالات التي يستحيل فيها اكتشاف أخطاء الشبكة في المتصفح ، لذلك يستجيب Axios بخطأ عام ( new Error('Network error') ). إذا كنت تريد تمييزها عن الاستجابات السيئة (رمز الحالة! == 2xx أو فحص مخصص) أعتقد أن أفضل طريقة هي التحقق من خاصية status بدلاً من رسالة الخطأ. على سبيل المثال:

axios.request(options).catch(function(error) {
  if (!error.status) {
    // network error
  }
});

أعتقد أن تعيين رمز حالة مخصص سيكون فكرة سيئة (قد يتسبب في مزيد من الارتباك) ولن يساعد تعيين خاصية معينة على الإطلاق لأن لدينا حالة خطأ واحدة فقط.

بالطبع في Node.js أسهل لأن لديك حق الوصول إلى الخطأ الفعلي ويمكنك التحقق وفقًا لوثائق Node.js.

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

مثال على الكود:

axios(options).then(() => {
  const foo = '';
  foo = 'bar'; // will throw error "assignment to constant"
}).catch(error => {
  if (!error.status) {
    // "assignment to constant" will be considered as network error
  }
})

أستخدم وظيفة الأداة المساعدة هذه للقبض على أخطاء الشبكة من المستوى الأدنى في مكدس المكالمات (يمنع تحديد الأخطاء غير المحسوبة كأخطاء في الشبكة):

function isNetworkError(err) {
  return !!err.isAxiosError && !err.response;
}

راجع https://github.com/axios/axios/pull/1419

أستخدم وظيفة الأداة المساعدة هذه للقبض على أخطاء الشبكة من المستوى الأدنى في مكدس المكالمات (يمنع تحديد الأخطاء غير المحسوبة كأخطاء في الشبكة):

function isNetworkError(err) {
  return !!err.isAxiosError && !err.response;
}

انظر # 1419

حل المشكلة
شكرا

mifi ، هل يمكنك عرض مثال أكثر تفصيلاً لكيفية استخدامك isNetworkError لمنع تحديد الأخطاء غير المحسوبة على أنها أخطاء في الشبكة؟

تماما مثل هذا:

try {
  ...
  some code that calls axios
  ...
} catch (err) {
  if (isNetworkError(err)) return alert(‘check your connection);
  throw err;
}

إذا كان خطأ CORS وكنت تستخدم Serverless ، فيمكن إصلاحه:

resources:
  Resources:
    # CORS for 4xx errors
    GatewayResponseDefault4XX:
      Type: 'AWS::ApiGateway::GatewayResponse'
      Properties:
        ResponseParameters:
          gatewayresponse.header.Access-Control-Allow-Origin: "'*'"
          gatewayresponse.header.Access-Control-Allow-Headers: "'*'"
        ResponseType: DEFAULT_4XX
        RestApiId:
          Ref: 'ApiGatewayRestApi'

مرحبًا ، هل يمكن لأي شخص مساعدتي ، "خطأ الشبكة":
https://stackoverflow.com/questions/58717673/axios-sending-network-error- while-status-is-200-ok

عندما يكون الخطأ هو "خطأ في الشبكة" ، فهذا يعني أن Axios coud لا يتصل بخادمك ، أو لسبب ما لا يتلقى الاستجابة من الخادم الخاص بك. بحيث لا يتم تحويل الخطأ 401 إلى أكسيوس. ربما تنشر سؤالًا مع بعض التعليمات البرمجية النموذجية على StackOverflow؟

أتلقى أيضًا نفس الخطأ ، بالنسبة لي ، إنه يصل إلى الخادم وأنا أستجيب بـ 403 و JSON ، مما ينتج عنه Network Error في Axios

يمكنني رؤية الاستجابة في علامة تبويب شبكة المتصفح ، ولكن في مربع الالتقاط ، err.response غير محدد

image

image

@ narenderv7 لي ايضا

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

أضف في الخادم 'Access-Control-Allow-Origin': '*'

@ ketysek أواجه نفس الخطأ

Screenshot from 2019-12-26 16-48-22

هل وجدت طريقة للقبض على هذا الخطأ؟

مرحبًا يا شباب ، لدي خطأ في CORS حيث تم الحصول على استجابة بالحالة 403 (4 * & 5 )يقوم Nginx بإرسال عنوان "Access-Control-Allow-Origin" فقط لحالة الاستجابة 2 و 3 *.

لقد قمت بحل هذه المشكلة ، قم بتحرير تكوين nginx من:
add_header 'Access-Control-Allow-Origin' '*';
إلى:
add_header 'Access-Control-Allow-Origin' '*' always;

لدي نفس المشكلة أنا أختبرها باستخدام axios 0.18.0 و 0.19.0

خطوات:
لقد قدمت طلبًا برمز منتهي الصلاحية أحيانًا الخطأ. جاءت الاستجابة بشكل صحيح ، ولكن في بعض الأحيان جاءت استجابة الخطأ غير محددة والرسالة هي `` خطأ في الشبكة ''. لماذا يحدث هذا خطأ في الخلفية أو خطأ في أكسيوس؟

في بعض الأحيان قد يكون سبب ذلك هو أدوات حظر الإعلانات في متصفحك ...
جرب وضع incognito أو private الوضع ، أو قم بتنزيل متصفح جديد لاختبار ...

@ narenderv7 نعم ، إنه خطأ من جانب الخادم. لكن أعتقد أن Axios يجب أن يكون قادرًا على التعامل مع خطأ في هذه الحالة ، أليس كذلك؟

أحتاج إلى التمييز بين هاتين الحالتين:

كما راجعت. إرجاع الخطأ بواسطة الكتلة catch هو نفسه في كلتا الحالتين المذكورتين أعلاه.

لا تزال هناك مشكلة:
https://github.com/axios/axios/issues/1296

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

أستخدم وظيفة الأداة المساعدة هذه للقبض على أخطاء الشبكة من المستوى الأدنى في مكدس المكالمات (يمنع تحديد الأخطاء غير المحسوبة كأخطاء في الشبكة):

function isNetworkError(err) {
  return !!err.isAxiosError && !err.response;
}

انظر # 1419

يمكن أن يتطابق خطأ المهلة أيضًا مع هذه الشروط.
image

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