Quando uma exceção é lançada em getServerSideProps em um ambiente sem servidor, a resposta é retornada com um código de status de 502 (Bad Gateway), que definitivamente não é o que é. Além disso, páginas personalizadas ou padrão de 500 não são renderizadas neste caso, então o usuário pode ver um rastreamento de pilha dependendo de como ou onde o aplicativo é implantado na produção. Este parece ser um problema do Next 9.5+, pois retornou um código de status 500 e uma página de erro adequada com o mesmo código em 9.4.x.
Isso acontecerá com qualquer página que encontrar um erro em getServerSideProps. Criei um repositório de amostra aqui com uma página de "problema":
https://github.com/spencewood/throw-app
Isso simplesmente inclui:
import React from "react";
export default function Problem() {
return (
<>
<h1>Problem!</h1>
</>
);
}
export const getServerSideProps = () => {
throw new Error("error");
};
Esta página implementada para vercel: https://throw-app.vercel.app/problem
E 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
Simplesmente fazer o downgrade do aplicativo acima para Next 9.4 renderizará corretamente a página 500 padrão para Next e retornará um código de status 500. Isso é o que deveria estar acontecendo, pois 500 indica simplesmente "erro do servidor" e 502 indica "inválido / sem resposta".
Abaixo estão as capturas de tela de https://throw-app.vercel.app/problem com a fonte aqui: https://github.com/spencewood/throw-app
Próximo 9.4
Próximos 9,5
Obviamente, você não vai lançar um erro como este, mas quaisquer exceções lançadas enquanto o lado do servidor gera dados dinâmicos a serem entregues ao aplicativo causará o 502.
Eu queria acrescentar um pouco mais aqui e mencionar que esse não é um problema do Vercel, embora tenha sido o que eu indiquei acima. Implantei um aplicativo inicial com exatamente o mesmo código para a página do problema no Netlify (embora eles não tenham uma página 502 bem alternativa): 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
O código para isso está aqui: https://github.com/spencewood/sonnet-18
Tendo o mesmo problema com isso no Vercel - anteriormente, NextJs usaria nossa página de erro personalizada para exibir 404 / outros problemas de getServerSideProps, mas agora temos a página de erro Vercel 502.
Mesmo problema aqui ! Além disso, não consigo ver os logs de exceção.
Descobri que foi implementado especialmente em https://github.com/vercel/next.js/pull/12841 , mas não tenho certeza do verdadeiro motivo disso e até mesmo por que o Doc para páginas de erro personalizadas ainda diz que podemos confiar em 500 (https://nextjs.org/docs/advanced-features/custom-error-page#500-page)
Comentários muito úteis
Mesmo problema aqui ! Além disso, não consigo ver os logs de exceção.