Next.js: Ошибка 502 при исключении в getServerSideProps

Созданный на 7 авг. 2020  ·  4Комментарии  ·  Источник: vercel/next.js

Сообщение об ошибке

Опишите ошибку

Когда исключение вызывается в getServerSideProps в бессерверной среде, ответ возвращается с кодом состояния 502 (Плохой шлюз), что определенно не то, что есть. Кроме того, пользовательские или стандартные страницы 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

Screen Shot 2020-08-07 at 1 25 55 PM

Следующие 9,5

Screen Shot 2020-08-07 at 1 25 59 PM

другие мысли

Очевидно, что вы не собираетесь выдавать такую ​​ошибку, но любые исключения, возникающие при генерации динамических данных на стороне сервера, которые будут доставлены в приложение, вызовут ошибку 502.

Самый полезный комментарий

Здесь та же проблема! Кроме того, не отображаются журналы исключений.

Все 4 Комментарий

Я хотел бы добавить здесь еще немного и упомянуть, что это не проблема 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://github.com/spencewood/sonnet-18

Возникла та же проблема с этим на Vercel - ранее NextJs использовали нашу настраиваемую страницу ошибок для отображения 404 / других проблем из getServerSideProps, но теперь мы получаем страницу ошибки Vercel 502.

Здесь та же проблема! Кроме того, не отображаются журналы исключений.

Я обнаружил, что это было специально реализовано в https://github.com/vercel/next.js/pull/12841 , но не уверен, что понял настоящую причину этого и даже почему Документ для пользовательских страниц ошибок по-прежнему говорит, что мы можем полагаться на 500 (https://nextjs.org/docs/advanced-features/custom-error-page#500-page)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги