Fehlerbehandlung

Diese Dokumentation erklärt, wie Sie Entwicklungs-, Server-seitige und Client-seitige Fehler behandeln können.

Fehlerbehandlung während der Entwicklung

Wenn während der Entwicklungsphase Ihrer Next.js-Anwendung ein Laufzeitfehler auftritt, wird ein Overlay angezeigt. Dabei handelt es sich um ein Modal, das die Webseite überlagert. Es ist nur sichtbar, wenn der Entwicklungsserver mit next dev über pnpm dev, npm run dev, yarn dev oder bun dev läuft und wird in der Produktionsumgebung nicht angezeigt. Das Beheben des Fehlers schließt das Overlay automatisch.

Hier ein Beispiel für ein Overlay:

Beispiel eines Overlays im Entwicklungsmodus

Server-seitige Fehlerbehandlung

Next.js bietet standardmäßig eine statische 500-Seite zur Behandlung von Server-seitigen Fehlern in Ihrer Anwendung. Sie können diese Seite auch anpassen, indem Sie eine pages/500.js-Datei erstellen.

Eine 500-Seite in Ihrer Anwendung zeigt dem Benutzer keine spezifischen Fehler an.

Sie können auch eine 404-Seite verwenden, um bestimmte Laufzeitfehler wie Datei nicht gefunden zu behandeln.

Client-seitige Fehlerbehandlung

React Error Boundaries bieten eine elegante Möglichkeit, JavaScript-Fehler auf dem Client zu behandeln, sodass die anderen Teile der Anwendung weiterhin funktionieren. Neben der Vermeidung von Seitenabstürzen ermöglichen sie die Bereitstellung einer benutzerdefinierten Fallback-Komponente und sogar die Protokollierung von Fehlerinformationen.

Um Error Boundaries in Ihrer Next.js-Anwendung zu verwenden, müssen Sie eine Klassenkomponente ErrorBoundary erstellen und die Component-Prop in der pages/_app.js-Datei wrappen. Diese Komponente ist verantwortlich für:

  • Das Rendern einer Fallback-UI nach einem aufgetretenen Fehler
  • Die Bereitstellung einer Möglichkeit, den Anwendungszustand zurückzusetzen
  • Die Protokollierung von Fehlerinformationen

Sie können eine ErrorBoundary-Klassenkomponente erstellen, indem Sie React.Component erweitern. Beispiel:

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

    // Zustandsvariable zur Verfolgung von Fehlern definieren
    this.state = { hasError: false }
  }
  static getDerivedStateFromError(error) {
    // Zustand aktualisieren, damit das nächste Rendering die Fallback-UI zeigt
    return { hasError: true }
  }
  componentDidCatch(error, errorInfo) {
    // Hier können Sie Ihren eigenen Fehlerprotokollierungsdienst verwenden
    console.log({ error, errorInfo })
  }
  render() {
    // Prüfen, ob ein Fehler aufgetreten ist
    if (this.state.hasError) {
      // Benutzerdefinierte Fallback-UI rendern
      return (
        <div>
          <h2>Ups, ein Fehler ist aufgetreten!</h2>
          <button
            type="button"
            onClick={() => this.setState({ hasError: false })}
          >
            Erneut versuchen?
          </button>
        </div>
      )
    }

    // Kindkomponenten zurückgeben, wenn kein Fehler vorliegt
    return this.props.children
  }
}

export default ErrorBoundary

Die ErrorBoundary-Komponente verwaltet einen hasError-Zustand. Der Wert dieser Zustandsvariable ist ein Boolean. Wenn der Wert von hasError true ist, rendert die ErrorBoundary-Komponente eine Fallback-UI. Andernfalls werden die Kindkomponenten gerendert.

Nach der Erstellung einer ErrorBoundary-Komponente importieren Sie sie in der pages/_app.js-Datei, um die Component-Prop in Ihrer Next.js-Anwendung zu wrappen.

// ErrorBoundary-Komponente importieren
import ErrorBoundary from '../components/ErrorBoundary'

function MyApp({ Component, pageProps }) {
  return (
    // Component-Prop mit ErrorBoundary-Komponente wrappen
    <ErrorBoundary>
      <Component {...pageProps} />
    </ErrorBoundary>
  )
}

export default MyApp

Mehr über Error Boundaries erfahren Sie in der React-Dokumentation.

Fehlerberichterstattung

Um Client-seitige Fehler zu überwachen, können Sie Dienste wie Sentry, Bugsnag oder Datadog verwenden.