Next.js пользовательская страница _error работает только локально

#next.js #netlify #vercel

Вопрос:

Вот ссылка на мое репозиторий, чтобы продемонстрировать проблему: https://github.com/jonathanwelton/nextjs-custom-error-test

Я пытаюсь использовать пользовательскую страницу _error в Next.js, который работает с локальной производственной сборкой (npm запускает сборку и запуск npm) при посещении /запуске (страница, которая выдает ошибку), но ни Netlify, ни Vercel не уважают его при развертывании приложения. Я просто получаю трассировку стека, которую вы можете увидеть здесь: https://nextjs-custom-error-test.netlify.app/throw

Возвращаясь к Next.js 9.4.4, страница custom _error работает в Vercel, но, похоже, вы не можете развернуть Next.js приложение ниже версии 10 на Netlify.

Я только что обновил приложение для использования следующей версии 11.0.0, но проблема все еще остается.

Кто-нибудь может объяснить, что я делаю не так?

Комментарии:

1. Вы пытались добавить а pages/500.js ? На Vercel и локально он работает безупречно: nextjs-пользовательский-тест на ошибки-rho.vercel.app/throw Возможно, Netlify не поддерживает эту функцию?

Ответ №1:

Как указано в документации: https://nextjs.org/docs/advanced-features/custom-error-page

Нам нужно передать реквизиты и определить, показывать ли фактическую страницу или страницу с ошибкой.

Измените код следующим образом

 export async function getServerSideProps() {
  try {
     // Your statements
     throw new Error('a new error')

     return {
      props: { data: [] },
     }
  } catch(e) {
     return {
         props: { errorCode: 500 },
     }
  }
}

const Throw = ({ errorCode, ...data }) {
  if (errorCode) {
    return <Error statusCode={errorCode} />
  }

  return <div>{...}</div>
}
export default Throw;
 

Комментарии:

1. эй, @p2pdops, я обновил страницу броска в соответствии с вашими изменениями выше, но у нее все еще та же проблема: nextjs-пользовательский тест на ошибки.netlify.app/бросок Стоит повторить, что старый код работал с Next.js 9.4.4

2. Привет @JonathanWelton, там написано » посетите reactjs.org/docs/… поэтому React пытается отобразить объект.. это значит _error.js отправляется, но есть какой-то передаваемый объект, сделайте заказ