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

Svelte / المتوسط: مسارات Kit وسياسة بيانات الخادم / الدرس 9

أفعال الخادم والنماذج التدريجية والإعادة

استخدم أفعال نماذج Kit كحدود كتابة صريحة موثقة وافصل التحسين عن ضمانات المجال.

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

أهداف الدرس

  • اشرح أفعال +page.server ونتائج fail وتحكم redirect.
  • تحقق من FormData واحفظ النتائج المعتمدة عبر إرسال متكرر.

يحتاج كل فعل سلطته الحالية الخاصة

يعالج الفعل في +page.server كتابة مستقلة عن العرض السابق. لا يفوض معرف مخفي أو قيمة متصفح أو زر معطل الكائن، فكلها تحت تحكم المستدعي. حل locals موثوقة وطبق السياسة قبل الأثر. لا تجعل آلية Kit المعاملة ذرية مع الخارج أو تمنع التكرار بعد فقد رد. افصل النسخة وهوية العملية عند الحاجة وأعد مؤكداً أوعدم حسم صريحاً لا المسودة المتفائلة. قد يصل طلب من نموذج قديم بعد تغير الصلاحية، لذلك يلزم فحص السلطة وقت التنفيذ لا اعتبار أن رؤية النموذج سابقاً إذن دائم.

أعد مشكلة الحقل المتوقعة قبل المصدر

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

javascript فعل نموذج افتراضي توضيحي
import {fail} from "@sveltejs/kit";
export const actions={
  default:async({request,locals})=>{
    const form=await request.formData();
    const title=form.get("title");
    if(typeof title!=="string" || !title.trim())return fail(400,{code:"INVALID_TITLE"});
    const course=await catalog.createFor(locals.principal,{title:title.trim()});
    return {course:{id:course.id,title:course.title}};
  }
};

الهوية وcatalog اعتمادان مراجَعان غير منفذين؛ لم ينتج طلب أو حفظ أو fail فعلي.

يغير التحسين التدريجي التفاعل لا الصلاحية

يمكن لنموذج POST صحيح أن يعمل بلا تحسين، وتضيف use:enhance سلوك أفعال Kit لا كل +server أوطريقة عشوائية. قد تغير callback المخصصة التحديث والإبطال والإعادة فاحفظ الافتراضي بقصد. اعرض انتظاراً وخطأ متاحين وأبق المسودة المفيدة. تحفظ Kit 3 تحكم redirect وerror الذي قدمته Kit 2 وقد تبتلعه catch؛ افصل التنقل والتجديد بعد النجاح عن حقيقة الحفظ. لا تعني رسالة فشل متصفح أن المصدر لم يكتب، كما لا يعني reset النموذج أن البيانات المعتمدة صارت مطابقة لما كان ظاهراً قبله.

احفظ الغياب مقابل المسح الصريح محلياً

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

javascript قاعدة وجود حقل تحديث محلية كاملة
function patch(source,input){return Object.hasOwn(input,"summary")?{...source,summary:input.summary}:{...source};}
const old={summary:"Original"};
console.assert(patch(old,{}).summary==="Original");
console.assert(patch(old,{summary:null}).summary===null);
console.assert(patch(old,{summary:""}).summary==="");
console.assert(old.summary==="Original");

تتبع الأربعة السياسة المعلنة دون تحويل FormData أوفعل أوكتابة مصدر.

اختبر التدفق التدريجي والكتابة غير المؤكدة مستقلين

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

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

يمنح حقل مخفي وصولاً لمقرر آخر

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

يسقط تحسين مخصص سلوك تحديث متوقعاً

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

يسبب فشل رد أثراً محفوظاً ثانياً

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

اختبر فهمك

1. هل تفوض use:enhance الفعل أوتضمن كتابة واحدة؟

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

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

2. لماذا قد تناسب fail عنواناً مخالفاً أكثر من استثناء خام؟

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

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

أهم ما تعلمته

  • الأفعال حدود كتابة خادمية مستقلة.
  • يحتاج التحسين والنتيجة المعتمدة والإعادة الدائمة عقوداً منفصلة.

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