Ist es in Gin möglich, alle HTTP-Fehler auf jeder Route zu behandeln, ohne sich wiederholende if-Anweisungen dafür zu schreiben? 400, 404, 500 usw. Fehler? Das Ziel besteht darin, Fehler innerhalb einer dedizierten Middleware-Funktion zu erfassen und zu behandeln.
Ja, Sie können eine Middleware verwenden, um die Fehlerbehandlung zu zentralisieren, wodurch die Notwendigkeit sich wiederholender if-Anweisungen in Routenhandlern entfällt. So geht's:
Erstellen Sie eine Middleware-Funktion namens ErrorHandler:
<code class="go">func ErrorHandler(c *gin.Context) { // Execute remaining handlers c.Next() // Retrieve and handle errors for _, err := range c.Errors { // Log, handle, etc. } // Default handler if no other error is handled c.JSON(http.StatusInternalServerError, "") }</code>
Registrieren Sie die ErrorHandler-Middleware in der Hauptfunktion:
<code class="go">// ... router := gin.New() router.Use(middleware.ErrorHandler) // ...</code>
Brechen Sie in Routenhandlern einfach die Anfrage mit dem Fehler ab, anstatt einen externen Fehlerhandler aufzurufen:
<code class="go">func (h *Handler) List(c *gin.Context) { movies, err := h.service.ListService() if err != nil { // Abort the request with the error c.AbortWithError(http.StatusInternalServerError, err) return } c.JSON(http.StatusOK, movies) }</code>
Inspizieren Sie in der ErrorHandler-Middleware die im Kontext erfassten Fehler:
<code class="go">for _, ginErr := range c.Errors { switch ginErr.Err { case ErrNotFound: c.JSON(-1, gin.H{"error": ErrNotFound.Error()}) // ... } }</code>
Sie können auch Protokollierung integrieren oder benutzerdefinierte Argumente an die Middleware übergeben als erforderlich:
<code class="go">func ErrorHandler(logger *zap.Logger) gin.HandlerFunc { return func(c *gin.Context) { c.Next() for _, ginErr := range c.Errors { logger.Error("whoops", ...) } } }</code>
Darüber hinaus sollten Sie erwägen, einen explizit festgelegten HTTP-Status in Ihrem Fehlerhandler nicht zu überschreiben, indem Sie beim Aufruf von c.JSON -1 als Statuscode verwenden.
Sie können c.Error in Routenhandlern verwenden, um mehrere Fehler zu erfassen und sie gemeinsam in der Fehler-Middleware zu behandeln.
Die Verwendung einer Middleware für die Fehlerbehandlung optimiert Ihre Codebasis und ermöglicht Sie können den Fehlerbehandlungsprozess anpassen und erweitern und bietet einen zentralen Kontrollpunkt für das Fehlermanagement.
Das obige ist der detaillierte Inhalt vonKann Gin Middleware alle HTTP-Fehler ohne sich wiederholende „if'-Anweisungen verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!