Express.js / دليل حلول تحريري

تشخيص الطلب المعلق وتكرار الرد والأخطاء غير المتزامنة

حدد مسؤول الإكمال المفقود أو المكرر قبل زيادة المهلة أو إضافة فروع catch أخرى.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى

قاعدة معرفة للقراءة فقط · بلا تعليقات عامة

تعرّف على الأعراض

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

افهم الأسباب المحتملة

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

احفظ دليل الفرع والالتزام بالرد

ابدأ بعينة اصطناعية واحدة وترتيب الوسائط الدقيق. سجل بدء المعالج واستدعاء المصدر وإرسال الترويسات وإكمال الرد أو إغلاقه مبكراً. لا تثبت headersSent توصيلاً كاملاً للعميل. يوحي التعليق قبل المصدر بفرع محلي، ويحتاج البحث المنتظر دليلاً من مرحلته. اربط ملاحظات الطلب نفسه؛ فقد يخترع جمع تتبع ناجح بخطأ طلب آخر تشخيص إرسال مزدوج. لا تعالج عدم اليقين بتسجيل كل الأجسام أو الأسرار، فغالباً تكفي علامات مرحلة آمنة لتحديد المسؤول.

اكتب مسؤولاً واحداً لكل فرع

سجل JSON مراجعة فروع اصطناعية لا تتبع إنتاج. اطلب لكل فرع فعلي رداً نهائياً أو تمريراً عادياً أو خطأً مع استمرار غير متزامن مسؤول عنه. عد بعد الرد حين يجب وقف الأسطر التالية، ولا تستدع next كتنظيف روتيني. إذا تسابق ردا نداء فنسق إكمالاً واحداً لا إرسالين. ويحتاج العمل المنفصل بروتوكول مهمة مستقلًا؛ فلا يعلن المعالج نجاحاً دائماً ويتجاهل فشلها اللاحق. تفيد كتابة المسؤول صراحة في رؤية الثغرة التي تخفيها فروع متداخلة.

json مراجعة اصطناعية لمسؤول الإكمال
{"branch":"synthetic-source-failure","sourcePromise":"returned-or-awaited","completionOwner":"one-error-path","afterFinalResponse":"return","headersAlreadySent":"delegate-and-clean-up","privatePayloadLogged":false}

يسمي قواعد فقط ولا يعيد توزيع Express أو يدعي مشاهدة خطأ.

اربط الفشل غير المتزامن مرة واحدة

أعد أو انتظر وعد عمل الطلب في Express 5 ليصل الرفض آلياً. يبقى رد المؤقت أو الحدث مستقلاً إلا إذا غلف أو مرر بقصد. أزل الغلاف الذي يستدعي next(error) ويرمي الخطأ مجدداً في الوعد. ضع معالج الوسائط الأربع بعد المسارات. إذا التزم الرد فمرر وفق المسار الموثق ولا تكتب JSON ثانية. أصلح ملكية الفرع محلياً؛ لا تعالج المهلة الطويلة مساراً بلا إكمال. لا تفترض أيضاً أن رفض الانتظار أوقف المصدر؛ قد يلزم إلغاء مدعوم وتنظيف منفصل.

تحقق من الإخراج والآثار معاً

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

تحقق من نجاح الإصلاح

يجب أن تكمل العينة أو تمرر مرة وتحفظ نتيجة آمنة وتحرر المورد. أدرج الفرع المعلق والمستمر بعد الرد، واحفظ المرحلة قبل وبعد وأكد غياب كتابة غير متوقعة عند الرفض.

امنع تكرار المشكلة

  • اجعل المعالج صغيراً والعودة صريحة والعمل تحت مسؤول، واختبر الرفض والنجاح. افصل غير المطابق عن ترجمة الخطأ النهائية وسجل الإصدار حتى لا تنقل سلوك وعود الخامس لإطار آخر.

المراجع الرسمية