عندما يتم طرح استثناء في getServerSideProps في بيئة بدون خادم ، يتم إرجاع الاستجابة برمز الحالة 502 (Bad Gateway) ، وهو بالتأكيد ليس ما هو عليه. بالإضافة إلى ذلك ، لا يتم عرض 500 صفحة مخصصة أو افتراضية في هذه الحالة ، لذلك قد يرى المستخدم تتبع مكدس بناءً على كيفية أو مكان نشر التطبيق في الإنتاج. يبدو أن هذه مشكلة Next 9.5+ ، حيث إنها أعادت رمز الحالة 500 وصفحة خطأ مناسبة بنفس الرمز في 9.4.x.
سيحدث هذا مع أي صفحة تواجه خطأ في getServerSideProps. لقد قمت بإنشاء نموذج ريبو هنا مع صفحة "مشكلة":
https://github.com/spencewood/throw-app
هذا يشمل ببساطة:
import React from "react";
export default function Problem() {
return (
<>
<h1>Problem!</h1>
</>
);
}
export const getServerSideProps = () => {
throw new Error("error");
};
تم نشر هذه الصفحة على vercel: https://throw-app.vercel.app/problem
وحليقة:
❯ curl -I "https://throw-app.vercel.app/problem"
HTTP/2 502
date: Fri, 07 Aug 2020 18:20:24 GMT
content-type: text/plain; charset=utf-8
x-nextjs-page: /problem
content-length: 68
server: Vercel
x-vercel-id: cle1::2cxmx-1596824424449-1d2c09ffce13
strict-transport-security: max-age=63072000; includeSubDomains; preload
cache-control: s-maxage=0
ما عليك سوى الرجوع إلى إصدار سابق من التطبيق أعلاه إلى Next 9.4 سيعرض بشكل صحيح صفحة 500 الافتراضية لـ Next وسيعيد رمز الحالة 500. هذا ما يجب أن يحدث ، حيث يشير 500 ببساطة إلى "خطأ في الخادم" بينما يشير الرقم 502 إلى "خطأ / عدم وجود استجابة".
فيما يلي لقطات شاشة من https://throw-app.vercel.app/problem مع المصدر هنا: https://github.com/spencewood/throw-app
التالي 9.4
التالي 9.5
من الواضح أنك لن تقوم بإلقاء خطأ مثل هذا ، ولكن أي استثناءات يتم طرحها أثناء إنشاء جانب الخادم للبيانات الديناميكية ليتم تسليمها إلى التطبيق سيؤدي إلى ظهور الخطأ 502.
أردت أن أضيف المزيد هنا وأذكر أن هذه ليست مشكلة فيرسيل على الرغم من أن هذا ما ربطته أعلاه. لقد نشرت تطبيقًا مبتدئًا بنفس الرمز بالضبط لصفحة المشكلة على Netlify (على الرغم من عدم وجود صفحة احتياطية 502 جميلة): https://distracted-curie-3f8cdd.netlify.app/problem
❯ curl -I "https://distracted-curie-3f8cdd.netlify.app/problem"
HTTP/2 502
cache-control: no-cache
date: Fri, 07 Aug 2020 21:16:19 GMT
content-length: 386
content-type: text/plain; charset=utf-8
age: 0
server: Netlify
x-nf-request-id: 17709115-ace0-4300-a026-dc21d6cd5cad-2642676
الكود الخاص بذلك هنا: https://github.com/spencewood/sonnet-18
تواجه نفس المشكلة مع هذا على Vercel - كانت NextJs سابقًا تستخدم صفحة الخطأ المخصصة الخاصة بنا لعرض 404 / مشكلات أخرى من getServerSideProps ولكننا نحصل الآن على صفحة خطأ Vercel 502.
نفس المشكلة هنا ! بالإضافة إلى ذلك ، لا يمكن رؤية سجلات الاستثناءات.
لقد وجدت أنه تم تنفيذه خصيصًا في https://github.com/vercel/next.js/pull/12841 ، ولكن لست متأكدًا من السبب الحقيقي لذلك وحتى لماذا لا يزال Doc لصفحات الخطأ المخصصة يقول أنه يمكننا الاعتماد عليه 500 (https://nextjs.org/docs/advanced-features/custom-error-page#500-page)
التعليق الأكثر فائدة
نفس المشكلة هنا ! بالإضافة إلى ذلك ، لا يمكن رؤية سجلات الاستثناءات.