Next.js / الأساسي: المسارات وحدود التنفيذ / الدرس 5
جلب بيانات الخادم والأخطاء وشكل المصدر
اقرأ البيانات المفوضة عبر حد خادمي وميز نجاح النقل عن سجل مجال صحيح.
في هذه الصفحة
أهداف الدرس
- اختر سياسة fetch صريحة في النمط الأساسي دون Cache Components.
- تحقق من حمولة المصدر وافصل الغياب عن الفشل.
ضع المصدر قرب حالة الاستخدام الخادمية
يستدعي المكون مساعد بيانات مفوضاً مباشرة بدلاً من دورة HTTP لمساره الخاص، التي قد تكرر افتراض الهوية وتجعل البناء يعتمد عنواناً لا يعمل. افصل المصدر خادمياً وأعد نموذجاً ضيقاً. تبقى الحمولة غير موثوقة حتى التحليل والفحص، ولا تسرب الاعتماد في URL أو خطأ أو خاصية. يغير تأكيد TypeScript بعد json اعتقاد النوع لا الشكل أو أهلية المستأجر. يقلل العقد الخادمي تكرار منطق الوصول بين صفحة ومسار وفعل، ويظل على كل مدخل إثبات الهوية التي سيقدمها لتلك الخدمة.
صرح بقصد الطلب غير المخزن
يختار الجزء no-store في النمط الأساسي ويفحص النجاح قبل json. العنوان .invalid اصطناعي ولا ينفذ. يصرح الخيار بقصد المخبأ ولا يفوض أو يثبت حداثة المصدر. أسهل مراجعة سياسة صريحة من افتراض أن كل جلب دائم أو لكل طلب. افصل الافتراض والتحضير وإعادة التطوير؛ قد يستعمل المسار خرجاً ثابتاً رغم عبارة مبسطة أن الجلب غير مخزن افتراضياً. لا تختبر العينة بوجود عنوان شكلي، بل يحفظ المثال الحد الذي ستحتاجه عند ربط مصدر مأذون حقيقي.
async function loadPublicCard(id:string) {
const response=await fetch(`https://catalog.example.invalid/cards/${encodeURIComponent(id)}`,{cache:"no-store"});
if (!response.ok) throw new Error("CATALOG_UNAVAILABLE");
return validateCard(await response.json());
}
لا يتصل بالعنوان الاصطناعي، ويحتاج المحقق وسياسة الأهلية تنفيذين مراجعين.
وازن المستقل دون تفرع غير محدود
ينشئ انتظار مستقل بالتتابع شلالاً، وقد يرهق وعد لكل عنصر غير محدود المصدر. حدد الاعتماد وقيد العدد قبل الجدولة؛ لا تلغي Promise.all بقية العمل عند رفض واحد. ضع المهلة والإلغاء وحدد قبول الوصف الجزئي أو الحاجة لنتيجة معتمدة كاملة. لا تجعل فشل الصلاحية سماحاً لأن الملخص يمكن فقده. يختلف عقد كلفة المصدر عن تدفق العرض. وقد تبين Suspense انتظاراً جيداً دون تقليل اتصالات فعلية، لذلك لا تعتبر ظهور واجهة أسرع دليلاً على أن ضغط المصدر صار محدوداً.
افحص سجل مصدر اصطناعي وقت التشغيل
يقبل المحقق كائناً صغيراً بمعرف وعنوان سلسلتين ويختارهما ويرفض عدداً مكان العنوان. هو فحص شكل لا نظام مخطط أو برهان أمن. قد يحتاج المصدر طولاً ونسخة وأهلية وسياسة مجهول. يعترف json بالصياغة فقط؛ ميز فساد البيانات من الغياب ولا تحول كل خطأ لقائمة ناجحة تخفي الانقطاع. تثبت التأكيدات حالتين محليتين وتبقى معالجة رموز HTTP والمهلة والجمهور وظائف موائم آخر لم يشغل هنا. يجب ألا يفسر رفض الشكل على أنه نفي وجود الكائن إذا كانت السياسة تحتاج تمييزاً داخلياً أدق.
function validateCard(value) {
if (!value || typeof value !== "object" || Array.isArray(value) || typeof value.id !== "string" || typeof value.title !== "string") throw new Error("INVALID_CARD");
return {id:value.id,title:value.title};
}
console.assert(validateCard({id:"c1",title:"Fetching",extra:"internal"}).title === "Fetching");
let rejected=false; try {validateCard({id:"c1",title:17});} catch {rejected=true;}
console.assert(rejected);
تختار العينة الصحيحة وترفض العنوان المخالف دون fetch أو تصيير Next.
اعرض نتائج آمنة مفيدة واحفظ الدليل
مثل الغياب بعقده ودع الفشل غير المتوقع يصل للحد المناسب بإفصاح مضبوط. سجل الفئة والربط لا الجسم الكامل. قد يقع الخطأ في البناء أو الطلب فحدد المرحلة قبل علامة مخبأ. اختبر المساعد ثم المكون والتنقل معزولاً مأذوناً. يشغل المقرر المحقق فقط دون HTTP أو ملف أو حفظ طلب أو بناء أو حد خطأ. لا تسم التأكيد تكامل جلب. يتيح الفصل تفسير صفحة بدت قديمة أو فارغة من أدلة مرحلة المصدر والتصيير بدلاً من التخمين بأن كل عرض غير صحيح سببه cache واحدة.
الأخطاء الشائعة وإصلاحها
يسمى تحليل JSON سجلاً متحققاً
- لماذا يحدث؟
- حل التعرف على صياغة JSON محل التحقق من شكل القيم وقواعد المجال.
- كيف تصلحه؟
- تحقق من القيم المستلمة واختر نموذج الإخراج العام.
- كيف تتجنب تكراره؟
- اختبر الأنواع المخالفة وفشل المصدر بصورة منفصلة.
يجلب المكون API خاصة غير متاحة بالبناء
- لماذا يحدث؟
- ربطت دورة HTTP داخلية غير لازمة التصيير بعنوان خدمة حية.
- كيف تصلحه؟
- استدع طبقة البيانات الخادمية المفوضة مباشرة عندما يناسب التصميم.
- كيف تتجنب تكراره؟
- راجع اعتمادات وقت البناء واعتمادات وقت الطلب بصورة مستقلة.
يرهق جلب متواز غير محدود المصدر
- لماذا يحدث؟
- أنشئت الوعود قبل تقييد عدد العمليات التي ستصل إلى المصدر.
- كيف تصلحه؟
- قيد حجم الإدخال وتزامن المصدر قبل بدء العمل.
- كيف تتجنب تكراره؟
- قس أعداد الاتصالات الآمنة وسلوك الإلغاء في دمج معزول مأذون.
اختبر فهمك
1. هل يثبت cache:no-store تفويض الوصول أو حداثة المصدر المعتمد؟
اعرض الحل المشروح
لا. يضبط هذا الخيار سلوك مخبأ fetch المختار في الإطار. قد يطبق المصدر نفسه نطاق مستأجر خاطئاً أو يعيد بيانات قديمة من طبقة مخبأ أخرى. تحقق من أهلية المصدر وحداثته بصورة مستقلة، وميز سياسة جلب البيانات عن إعادة استعمال إخراج المسار وعن الحالة الموجودة في المتصفح.
2. لماذا لا تعامل كل فشل في المصدر باعتباره حالة عدم وجود؟
اعرض الحل المشروح
لا يثبت انقطاع المصدر أو السجل المعيب أن الكائن المطلوب غير موجود. قد يضلل دمج الحالات المستخدم ويخفي العطل، حتى عندما تقصد سياسة الإفصاح تشابه الكائن الممنوع والغائب أمام الجمهور. احفظ فئات داخلية متميزة وعقد خطأ عاماً آمناً، مع عينات منفصلة للغياب وللفشل.
أهم ما تعلمته
- تحقق من الشكل والأهلية وقصد المخبأ منفصلة.
- لا يحد تحسن الانتظار عمل المصدر تلقائياً.