Gestion des erreurs

Cette documentation explique comment gérer les erreurs de développement, côté serveur et côté client.

Gestion des erreurs en développement

Lorsqu'une erreur d'exécution survient pendant la phase de développement de votre application Next.js, vous rencontrerez un overlay. C'est une modale qui recouvre la page web. Elle est uniquement visible lorsque le serveur de développement est exécuté avec next dev via pnpm dev, npm run dev, yarn dev ou bun dev et n'apparaîtra pas en production. Corriger l'erreur fera automatiquement disparaître l'overlay.

Voici un exemple d'overlay :

Exemple d'overlay en mode développement

Gestion des erreurs côté serveur

Next.js fournit par défaut une page 500 statique pour gérer les erreurs côté serveur dans votre application. Vous pouvez également personnaliser cette page en créant un fichier pages/500.js.

Avoir une page 500 dans votre application n'affiche pas les erreurs spécifiques à l'utilisateur.

Vous pouvez aussi utiliser une page 404 pour gérer des erreurs d'exécution spécifiques comme fichier non trouvé.

Gestion des erreurs côté client

Les Error Boundaries (limites d'erreur) de React offrent une manière élégante de gérer les erreurs JavaScript côté client pour que les autres parties de l'application continuent à fonctionner. En plus d'éviter le plantage de la page, cela vous permet de fournir un composant de repli personnalisé et même de journaliser les informations d'erreur.

Pour utiliser les Error Boundaries dans votre application Next.js, vous devez créer un composant classe ErrorBoundary et encapsuler la prop Component dans le fichier pages/_app.js. Ce composant sera responsable de :

  • Afficher une interface de repli après une erreur
  • Fournir un moyen de réinitialiser l'état de l'application
  • Journaliser les informations d'erreur

Vous pouvez créer un composant classe ErrorBoundary en étendant React.Component. Par exemple :

class ErrorBoundary extends React.Component {
  constructor(props) {
    super(props)

    // Définit une variable d'état pour suivre les erreurs
    this.state = { hasError: false }
  }
  static getDerivedStateFromError(error) {
    // Met à jour l'état pour afficher l'interface de repli
    
    return { hasError: true }
  }
  componentDidCatch(error, errorInfo) {
    // Vous pouvez utiliser votre propre service de journalisation ici
    console.log({ error, errorInfo })
  }
  render() {
    // Vérifie si une erreur est survenue
    if (this.state.hasError) {
      // Vous pouvez afficher n'importe quelle interface de repli
      return (
        <div>
          <h2>Oups, une erreur est survenue !</h2>
          <button
            type="button"
            onClick={() => this.setState({ hasError: false })}
          >
            Réessayer ?
          </button>
        </div>
      )
    }

    // Retourne les composants enfants s'il n'y a pas d'erreur

    return this.props.children
  }
}

export default ErrorBoundary

Le composant ErrorBoundary suit l'état hasError. La valeur de cette variable d'état est un booléen. Lorsque hasError est true, le composant affiche une interface de repli. Sinon, il affiche les composants enfants.

Après avoir créé un composant ErrorBoundary, importez-le dans le fichier pages/_app.js pour encapsuler la prop Component dans votre application Next.js.

// Importe le composant ErrorBoundary
import ErrorBoundary from '../components/ErrorBoundary'

function MyApp({ Component, pageProps }) {
  return (
    // Encapsule la prop Component avec ErrorBoundary
    <ErrorBoundary>
      <Component {...pageProps} />
    </ErrorBoundary>
  )
}

export default MyApp

Vous pouvez en apprendre plus sur les Error Boundaries (limites d'erreur) dans la documentation de React.

Signalement des erreurs

Pour surveiller les erreurs côté client, utilisez un service comme Sentry, Bugsnag ou Datadog.