Heim >Backend-Entwicklung >Golang >Wie kann ich die 404-Fehlerbehandlung in httprouter mit benutzerdefinierten Handlern anpassen?

Wie kann ich die 404-Fehlerbehandlung in httprouter mit benutzerdefinierten Handlern anpassen?

Susan Sarandon
Susan SarandonOriginal
2024-10-25 19:02:02673Durchsuche

How to Customize 404 Error Handling in httprouter with Custom Handlers?

Umgang mit 404s in httprouter mit benutzerdefinierten Handlern

httprouter ist eine beliebte Routing-Middleware für Golang, mit der Sie benutzerdefinierte Handler für bestimmte Routen oder Muster registrieren können. In Fällen, in denen eine Route oder Ressource nicht gefunden wird, möchten Sie diese 404-Not-Found-Antworten möglicherweise selbst bearbeiten.

Das NotFound-Feld verstehen

Der Typ httprouter.Router verfügt über ein Feld namens NotFound, Das ist ein http.Handler. Das bedeutet, dass Sie diesem Feld einen benutzerdefinierten Handler zuweisen können, um 404-Antworten zu verarbeiten.

Erstellen eines benutzerdefinierten NotFound-Handlers

Um einen benutzerdefinierten NotFound-Handler zu erstellen, müssen Sie eine Funktion mit der Signatur definieren :

func(http.ResponseWriter, *http.Request)

Sie können diese Funktion dann mithilfe der Hilfsfunktion http.HandlerFunc in einen http.Handler konvertieren.

Beispielverwendung

Hier ist ein Beispiel dafür, wie Sie kann einen benutzerdefinierten NotFound-Handler festlegen:

<code class="go">func MyNotFound(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "text/plain; charset=utf-8")
    w.WriteHeader(http.StatusNotFound)
    w.Write([]byte("My own Not Found handler."))
    w.Write([]byte(" The page you requested could not be found."))
}

var router *httprouter.Router = ... // Your router value
router.NotFound = http.HandlerFunc(MyNotFound)</code>

Dieser benutzerdefinierte Handler wird automatisch von httprouter aufgerufen, wenn eine 404 Not Found-Antwort auftritt.

Manueller Aufruf des NotFound-Handlers

In einigen Fällen möchten Sie möglicherweise den NotFound-Handler manuell aus einem anderen Handler heraus aufrufen. Sie können dies erreichen, indem Sie einen ResponseWriter und eine *Request an die MyNotFound-Funktion oder direkt an die NotFound-Methode des Routers übergeben:

<code class="go">func ResourceHandler(w http.ResponseWriter, r *http.Request) {
    exists := ... // Find out if requested resource is valid and available
    if !exists {
        MyNotFound(w, r) // Pass ResponseWriter and Request
        // Or via the Router:
        // router.NotFound(w, r)
        return
    }

    // Resource exists, serve it
    // ...
}</code>

Das obige ist der detaillierte Inhalt vonWie kann ich die 404-Fehlerbehandlung in httprouter mit benutzerdefinierten Handlern anpassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn