Lorsqu'une exception est levée dans getServerSideProps dans un environnement sans serveur, la réponse est renvoyée avec un code d'état 502 (Bad Gateway), ce qui n'est certainement pas ce qu'il est. En outre, les pages 500 personnalisées ou par défaut ne sont pas rendues dans ce cas, de sorte que l'utilisateur peut voir une trace de pile en fonction de la manière ou de l'emplacement de déploiement de l'application en production. Cela semble être un problème Next 9.5+, car il a renvoyé un code d'état 500 et une page d'erreur appropriée avec le même code dans 9.4.x.
Cela se produira avec toute page qui rencontre une erreur dans getServerSideProps. J'ai créé un exemple de dépôt ici avec une page "problème":
https://github.com/spencewood/throw-app
Cela comprend simplement:
import React from "react";
export default function Problem() {
return (
<>
<h1>Problem!</h1>
</>
);
}
export const getServerSideProps = () => {
throw new Error("error");
};
Cette page déployée sur vercel: https://throw-app.vercel.app/problem
Et curl:
❯ 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
Le simple fait de rétrograder l'application ci-dessus vers Next 9.4 rendra correctement la page 500 par défaut pour Next et renverra un code d'état 500. C'est ce qui devrait se passer, car un 500 indique simplement "erreur de serveur" et 502 indique "non valide / pas de réponse".
Vous trouverez ci-dessous des captures d'écran de https://throw-app.vercel.app/problem avec la source ici: https://github.com/spencewood/throw-app
Suivant 9.4
Suivant 9.5
De toute évidence, vous n'allez pas lancer une erreur comme celle-ci, mais toute exception levée lors de la génération de données dynamiques côté serveur à l'application entraînera le 502.
Je voulais ajouter un peu plus ici et mentionner que ce n'est pas un problème Vercel, même si c'est ce à quoi j'ai lié ci-dessus. J'ai déployé une application de démarrage avec exactement le même code pour la page de problème sur Netlify (bien qu'ils n'aient pas de jolie page de secours 502): https://distraced-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
Le code pour cela est ici: https://github.com/spencewood/sonnet-18
Ayant le même problème avec cela sur Vercel - auparavant, NextJs utilisait notre page d'erreur personnalisée pour afficher 404 / autres problèmes de getServerSideProps, mais nous obtenons maintenant la page d'erreur Vercel 502.
Même problème ici ! De plus, je ne peux pas voir les journaux d'exceptions.
J'ai trouvé qu'il était spécialement implémenté dans https://github.com/vercel/next.js/pull/12841 , mais je ne suis pas sûr d'avoir la vraie raison de cela et même pourquoi Doc pour les pages d'erreur personnalisées dit toujours que nous pouvons compter sur 500 (https://nextjs.org/docs/advanced-features/custom-error-page#500-page)
Commentaire le plus utile
Même problème ici ! De plus, je ne peux pas voir les journaux d'exceptions.