Wenn in getServerSideProps in einer Umgebung ohne Server eine Ausnahme ausgelöst wird, wird die Antwort mit dem Statuscode 502 (Bad Gateway) zurückgegeben, was definitiv nicht der Fall ist. Darüber hinaus werden in diesem Fall benutzerdefinierte oder standardmäßige 500 Seiten nicht gerendert, sodass dem Benutzer möglicherweise eine Stapelverfolgung angezeigt wird, je nachdem, wie oder wo die App in der Produktion bereitgestellt wird. Dies scheint ein Next 9.5+ -Problem zu sein, da ein 500-Statuscode und eine ordnungsgemäße Fehlerseite mit demselben Code in 9.4.x zurückgegeben wurden.
Dies geschieht bei jeder Seite, bei der ein Fehler in getServerSideProps auftritt. Ich habe hier ein Beispiel-Repo mit einer "Problem" -Seite erstellt:
https://github.com/spencewood/throw-app
Dies beinhaltet einfach:
import React from "react";
export default function Problem() {
return (
<>
<h1>Problem!</h1>
</>
);
}
export const getServerSideProps = () => {
throw new Error("error");
};
Diese Seite wurde für vercel bereitgestellt: https://throw-app.vercel.app/problem
Und locken:
❯ 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
Durch einfaches Downgrade der obigen App auf Next 9.4 wird die Standard-500-Seite für Next korrekt gerendert und ein 500-Statuscode zurückgegeben. Dies sollte passieren, da ein 500 einfach "Serverfehler" und 502 "ungültig / keine Antwort" anzeigt.
Unten finden Sie Screenshots von https://throw-app.vercel.app/problem mit der Quelle hier: https://github.com/spencewood/throw-app
Weiter 9.4
Weiter 9.5
Natürlich werden Sie keinen solchen Fehler auslösen, aber alle Ausnahmen, die beim serverseitigen Generieren dynamischer Daten an die App ausgelöst werden, führen zum 502.
Ich wollte hier nur ein wenig mehr hinzufügen und erwähnen, dass dies kein Vercel-Problem ist, obwohl ich oben darauf verwiesen habe. Ich habe eine Starter-App mit genau demselben Code für die Problemseite auf Netlify bereitgestellt (obwohl sie keine hübsche Fallback-502-Seite haben): 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
Der Code dafür ist hier: https://github.com/spencewood/sonnet-18
Das gleiche Problem mit diesem bei Vercel - zuvor verwendeten NextJs unsere benutzerdefinierte Fehlerseite, um 404 / andere Probleme von getServerSideProps anzuzeigen, aber jetzt erhalten wir die Vercel 502-Fehlerseite.
Selbes Problem hier ! Außerdem können keine Ausnahmeprotokolle angezeigt werden.
Ich fand, dass es speziell in https://github.com/vercel/next.js/pull/12841 implementiert wurde, war mir aber nicht sicher, warum und warum Doc für benutzerdefinierte Fehlerseiten immer noch sagt, dass wir uns darauf verlassen können 500 (https://nextjs.org/docs/advanced-features/custom-error-page#500-page)
Hilfreichster Kommentar
Selbes Problem hier ! Außerdem können keine Ausnahmeprotokolle angezeigt werden.