محتويات الدورة

Next.js / الأساسي: المسارات وحدود التنفيذ / الدرس 6

النماذج وأفعال الخادم والكتابات المتحقق منها

عامل Server Action كحد كتابة قابل للاستدعاء بإدخال غير موثوق وسلطة حالية وعقد نتيجة مقصود.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

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

ليس توجيه الخادم قاعدة وصول

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

تحقق من القيم وحل السلطة الحالية بالداخل

يقرأ الفعل FormData ويجلب الهوية الحالية ويستدعي الخدمة. قد تعيد get نصاً أو ملفاً أو null، فلا يفترض محقق النص النوع. لم يضمن المساعد أو الاستيراد ولم يترجم أو يرسل. أعد نتيجة صغيرة للرفض المتوقع دون استثناء داخلي. استعمل دمج React المناسب للانتظار وخطأ الحقل ووافق التوقيع معه؛ لا تنسخ معالج وسيط واحد لخطاف يمرر حالة سابقة. يوضح الجزء أسبقية الهوية والتحقق ولا ينفذ خدمة حفظ أو بروتوكول جلسة ضمن هذا المثال التعليمي.

typescript حد فعل موثق توضيحي
export async function renameCourse(form:FormData) {
  "use server";
  const principal=await currentPrincipal();
  const input=parseRenameForm(form);
  return catalog.renameFor(principal,input);
}

يفترض التحليل والهوية والخدمة ولم يحدث طلب فعل أو كتابة.

اجعل الانتظار والنتيجة المعتمدة مفيدين

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

ارفض غير النص والفارغ محلياً

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

javascript محلل قيمة نموذج محلي كامل
function renameTitle(value) {
  if (typeof value !== "string") throw new Error("INVALID_TITLE");
  const title=value.trim();
  if ([...title].length < 1 || [...title].length > 60) throw new Error("INVALID_TITLE");
  return title;
}
console.assert(renameTitle("  Actions  ") === "Actions");
for (const value of [null,{},"   "]) {let rejected=false;try {renameTitle(value);} catch {rejected=true;} console.assert(rejected);}

تنظف السلسلة الصحيحة وترفض الثلاثة دون إرسال FormData أو خطاف أو فعل.

افصل الحفظ والتحديث والتحويل

تحقق من الإدخال والسلطة قبل الأثر ثم طبق المعاملة وهوية الطلب. أبطل بعد نتيجة مؤكدة واختر تحمل القديم أو رؤية كتابة فورية. تستخدم redirect تحكماً خاصاً فلا تبتلعها catch عامة. اختبر المخالفة بلا كتابة والمنع والتكرار والتعارض وفقد الرد. يشغل المقرر محلل العنوان فقط دون النقل والتحسين والخطاف والتحويل والمخبأ. لا يحسم الخطأ بعد الحفظ هل ينبغي إعادة العملية؛ تسوي الهوية النتيجة بدلاً من تكرارها عميانياً لأن المتصفح لم ير رسالة نجاح.

الأخطاء الشائعة وإصلاحها

يفوض courseId مخفي إعادة التسمية

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

تصبح قيمة ملف عنواناً غير مقصود

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

يلتقط التحويل كفشل فعل عام

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

اختبر فهمك

1. هل يضمن تعطيل الزر أثناء الانتظار وقوع أثر واحد في الخادم؟

اعرض الحل المشروح

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

2. لماذا تتحقق داخل Server Action حتى إذا تحققت الصفحة من الوصول؟

اعرض الحل المشروح

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

أهم ما تعلمته

  • تحتاج أفعال الخادم صرامة الإدخال والسلطة نفسها كبقية المداخل.
  • الحفظ وتغذية الواجهة وتحديث المخبأ نتائج مختلفة.

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