サーバーレス環境のgetServerSidePropsで例外がスローされると、応答はステータスコード502(Bad Gateway)で返されますが、これは間違いなくそれが何であるかではありません。 さらに、この場合、カスタムまたはデフォルトの500ページはレンダリングされないため、アプリが本番環境で展開される方法または場所に応じて、ユーザーにスタックトレースが表示される場合があります。 9.4.xで500のステータスコードと同じコードの適切なエラーページが返されたため、これは次の9.5以降の問題のようです。
これは、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
上記のアプリをNext9.4にダウングレードするだけで、Nextのデフォルトの500ページが正しくレンダリングされ、500ステータスコードが返されます。 500は単に「サーバーエラー」を示し、502は「無効/応答なし」を示すため、これが発生するはずです。
以下は、 https : //throw-app.vercel.app/problemのスクリーンショットとソースがここにあります: //github.com/spencewood/throw-app
次の9.4
次の9.5
明らかに、このようなエラーはスローされませんが、サーバー側で動的データを生成してアプリに配信するときに例外がスローされると、502が発生します。
ここにもう少し追加して、これはVercelの問題ではないことを述べたいと思いますが、それは上記でリンクしたものです。 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 :
Vercelでこれと同じ問題が発生します-以前はNextJsはカスタムエラーページを使用してgetServerSidePropsから404 /その他の問題を表示していましたが、現在はVercel502エラーページが表示されます。
ここでも同じ問題です! さらに、例外ログを表示できません。
https://github.com/vercel/next.js/pull/12841で特別に実装されていることがわかりましたが、その本当の理由はわかりません
最も参考になるコメント
ここでも同じ問題です! さらに、例外ログを表示できません。