Errores personalizados

Página 404

Una página 404 puede ser accedida con mucha frecuencia. Renderizar en el servidor una página de error para cada visita incrementa la carga del servidor de Next.js. Esto puede resultar en mayores costos y experiencias lentas.

Para evitar los problemas mencionados, Next.js proporciona una página 404 estática por defecto sin necesidad de añadir archivos adicionales.

Personalización de la página 404

Para crear una página 404 personalizada puedes crear un archivo pages/404.js. Este archivo se genera estáticamente durante el proceso de construcción.

pages/404.js
export default function Custom404() {
  return <h1>404 - Página no encontrada</h1>
}

Es bueno saber: Puedes usar getStaticProps dentro de esta página si necesitas obtener datos durante el tiempo de construcción.

Página 500

Renderizar en el servidor una página de error para cada visita añade complejidad al manejo de errores. Para ayudar a los usuarios a obtener respuestas rápidas ante errores, Next.js proporciona una página 500 estática por defecto sin necesidad de añadir archivos adicionales.

Personalización de la página 500

Para personalizar la página 500 puedes crear un archivo pages/500.js. Este archivo se genera estáticamente durante el proceso de construcción.

pages/500.js
export default function Custom500() {
  return <h1>500 - Ocurrió un error en el servidor</h1>
}

Es bueno saber: Puedes usar getStaticProps dentro de esta página si necesitas obtener datos durante el tiempo de construcción.

Personalización avanzada de páginas de error

Los errores 500 son manejados tanto en el lado del cliente como del servidor por el componente Error. Si deseas sobrescribirlo, define el archivo pages/_error.js y añade el siguiente código:

function Error({ statusCode }) {
  return (
    <p>
      {statusCode
        ? `Ocurrió un error ${statusCode} en el servidor`
        : 'Ocurrió un error en el cliente'}
    </p>
  )
}

Error.getInitialProps = ({ res, err }) => {
  const statusCode = res ? res.statusCode : err ? err.statusCode : 404
  return { statusCode }
}

export default Error

pages/_error.js solo se usa en producción. En desarrollo obtendrás un error con la traza de llamadas para saber dónde se originó el error.

Reutilización de la página de error integrada

Si deseas renderizar la página de error integrada puedes hacerlo importando el componente Error:

import Error from 'next/error'

export async function getServerSideProps() {
  const res = await fetch('https://api.github.com/repos/vercel/next.js')
  const errorCode = res.ok ? false : res.status
  const json = await res.json()

  return {
    props: { errorCode, stars: json.stargazers_count },
  }
}

export default function Page({ errorCode, stars }) {
  if (errorCode) {
    return <Error statusCode={errorCode} />
  }

  return <div>Estrellas de Next: {stars}</div>
}

El componente Error también acepta title como propiedad si deseas incluir un mensaje de texto junto con el statusCode.

Si tienes un componente Error personalizado, asegúrate de importar ese en lugar del predeterminado. next/error exporta el componente por defecto usado por Next.js.

Consideraciones