Next.js / دليل حلول تحريري
تشخيص سلطة Server Action وإعادة الكتابة غير المؤكدة
تحقق من حد إدخال الفعل وسياسته، وسو نتيجة قد تكون محفوظة قبل إعادة الكتابة.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
قد يغير فعل مباشر مقرراً أخفته الصفحة، أو يفرغ حقل دون قصد، أو تكرر إعادة أثراً بعد رسالة فشل العميل. لا يثبت زر معطل أو تخطيط محمي تفويض الفعل. كما لا يثبت غياب الرد أن كتابة المصدر لم تحفظ.
افهم الأسباب المحتملة
- تشمل الأسباب الثقة بإدخال مخفي أو مرتبط، والتحقق في العميل فقط، وتحويل قيمة ملف إلى نص، ودمج الغياب وnull، وغياب سياسة الكائن، أو خلط فشل المخبأ والتحويل بفشل الحفظ. تحتاج المحاولات هوية عملية منطقية؛ لا يميز معرف الكائن وحده الإعادة من تعديل جديد.
عامل الفعل كمدخل خادم مستقل قابل للاستدعاء
حدد الفعل المصدر وحل الهوية الحالية وطريقة خدمة المجال. لا تفترض أن عرض الصفحة أو فحص Proxy السابق يثبت السلطة وقت الكتابة. تحقق من كل ما يختاره المستدعي، بما فيه المعرف المخفي والوسيط المرتبط والنسخة والمفتاح. قد تحمل FormData نصاً أو ملفاً أو null، ويحفظ التحديث وجود العضو. اختبر الانتقال الصحيح البنية الممنوع مستقلاً عن الإدخال المعيب. احفظ فئة رفض آمنة ومراقب خدمة يثبت غياب الأثر بعد المنع، دون تسجيل اعتماد أو حمولة نموذج خاصة كاملة.
افصل التحقق والحفظ والإبطال والتنقل
ابن تسلسلاً آمناً لعملية واحدة: قبول الإدخال وإثبات السلطة وحفظ الأثر وتسجيل النتيجة وتحديث المخبأ وتوصيل الرد أو التحويل. لا يلغي فشل مرحلة لاحقة الحفظ السابق. تستخدم redirect تحكماً لا تبتلعه catch عامة كفشل كتابة. قد يترك الإبطال المعطل واجهة قديمة والبيانات المعتمدة حديثة. قبل الإعادة اقرأ نتيجة العملية أو الكائن بعقد النطاق الحالي. لا تستنتج التراجع من 500 أو انتقال متصفح فاشل أو نتيجة فعل لم تصل.
اجعل القصد المنطقي نفسه يسترجع نتيجته المسجلة
تعيد الخريطة النتيجة المسجلة للعملية المكررة دون زيادة الأثر، فتوضح حفظاً يحتاج تأكيده إلى تسوية. لا تنفذ نطاق الهوية أو تعارض البصمة الموحدة أو مخزناً مشتركاً ذرياً أو احتفاظاً أو تعافياً؛ يحتاج البروتوكول الحقيقي ما يلزمه منها. للتعديل الجديد هوية جديدة ولو للمقرر نفسه. تعالج النسخة تعديلين متعارضين ويعالج المفتاح إعادة الإرسال. افصل الدورين وافحص التكرار المتزامن وفقد الرد في دمج مصدر معزول مأذون، لا باستنتاج ضمان موزع من الخريطة.
const outcomes=new Map();let effects=0;
function attempt(id) {
if(outcomes.has(id))return outcomes.get(id);
const result={revision:++effects};outcomes.set(id,result);return result;
}
const first=attempt("rename-17");const replay=attempt("rename-17");
console.assert(first===replay && effects===1);
تعاد النتيجة المحلية نفسها بأثر واحد دون رد فعل حقيقي أو فقده أو إثبات ديمومة.
أصلح السياسة والإعادة قبل تجميل رسالة النجاح
ضع التحقق والسلطة داخل الفعل والحالة المشتركة قبل الأثر. أعد حقولاً معتمدة أو مشاكل متوقعة مستقرة بتوقيع حالة النموذج الحقيقي. اختر حداثة العلامة والمسار بعد الحفظ وافصلها عن الإعادة. قد يمنع الانتظار نقرة عرضية لا فرادة دائمة. ينفذ الدليل الخريطة فقط دون FormData أو مصادقة أو فعل أو قاعدة أو إبطال. تحقق من الإصلاح الحقيقي بهويات آمنة ممنوعة ومسموحة ومراقب مصدر وعينات تعاف صريحة. لا تجعل اختفاء الخطأ في الواجهة دليلاً أن كل كتابة مكررة ستكتشف بعد إعادة تشغيل العملية.
تحقق من نجاح الإصلاح
اختبر أنواع المدخلات غير الصالحة، والنص الفارغ، والحقول الحساسة غير المعروفة، ونطاق الكائن الممنوع، والتعارض المتوقع، والنجاح الأول، وإعادة العملية نفسها بمدخلات مطابقة، وحالة حفظ الكتابة قبل فقد الرد. أكد النتيجة العامة الدقيقة، وتحقق من عدم حدوث أي كتابة محمية عند الرفض. اختبر تعافي المخبأ والتنقل بصورة مستقلة، واحفظ وصف النتائج التي لم تحسم بصدق.
امنع تكرار المشكلة
- شارك تفويض المجال بين الفعل والمعالج، ووضح التحليل الفعلي ووجود حقول التحديث، واحتفظ بنتائج العملية بنطاقها لنافذة الإعادة الموعودة. اختبر حالة النموذج والتحويل والإبطال بالإصدار والنمط المختارين، وأبعد الخاص عن النتائج والبيانات الوصفية والتشخيص.