Pelayan HTTP biasanya memaparkan mesej ralat asas "halaman 404 tidak ditemui" apabila pengguna meminta URL yang tidak wujud . Untuk memberikan pengalaman yang lebih bermaklumat atau tersuai, anda perlu melaksanakan pengendali halaman ralat tersuai.
Dalam pakej HTTP standard untuk Go, terdapat mekanisme untuk mengendalikan semua permintaan yang tidak dikendalikan dan memaparkan halaman ralat tersuai . Mari kita mendalami cara untuk mencapai ini:
Fungsi Pengendali Ralat Tersuai
Buat fungsi untuk mengendalikan halaman ralat tersuai. Fungsi ini memerlukan tiga hujah:
func errorHandler(w http.ResponseWriter, r *http.Request, status int) { // Set the HTTP status code. w.WriteHeader(status) // Customize the error response for specific status codes. if status == http.StatusNotFound { fmt.Fprint(w, "Custom 404 error message") } }
Menetapkan Ralat Tersuai Pengendali
Fungsi pengendali ralat perlu dipautkan ke pelayan HTTP. Ini dilakukan dalam fungsi http.ListenAndServe, yang memulakan pelayan pada port yang ditentukan.
http.ListenAndServe(":12345", nil)
Ganti nil dengan pengendali permintaan HTTP tersuai yang mengendalikan semua permintaan.
http.ListenAndServe(":12345", new(http.ServeMux))
Dalam ServeMux, tambahkan pengendali laluan asal untuk URL tertentu.
mux := http.NewServeMux() mux.HandleFunc("/smth/", smthHandler) mux.HandleFunc("/", homeHandler) http.ListenAndServe(":12345", mux)
Akhir sekali, tambahkan NotFoundHandler kepada ServeMux untuk mengendalikan semua URL lain yang tidak dikendalikan oleh pengendali laluan tertentu.
mux.NotFoundHandler = http.HandlerFunc(errorHandler)
Kod Contoh
Kod contoh lengkap yang melaksanakan pendekatan di atas ialah seperti berikut:
package main import ( "fmt" "net/http" ) func main() { mux := http.NewServeMux() mux.HandleFunc("/smth/", smthHandler) mux.HandleFunc("/", homeHandler) mux.NotFoundHandler = http.HandlerFunc(errorHandler) http.ListenAndServe(":12345", mux) } func smthHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/smth/" { errorHandler(w, r, http.StatusNotFound) return } fmt.Fprint(w, "Welcome to smth") } func homeHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { errorHandler(w, r, http.StatusNotFound) return } fmt.Fprint(w, "Welcome home") } func errorHandler(w http.ResponseWriter, r *http.Request, status int) { w.WriteHeader(status) if status == http.StatusNotFound { fmt.Fprint(w, "Custom 404 error message") } }
Kod ini mentakrifkan pengendali laluan untuk URL tertentu (/smth/ dan /) dan memberikan fungsi pengendali ralat tersuai (errorHandler) untuk mengendalikan semua permintaan lain yang tidak dikendalikan. Apabila pengguna cuba mengakses URL yang tidak wujud, halaman ralat 404 tersuai akan dipaparkan dan bukannya mesej lalai "halaman 404 tidak ditemui".
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Halaman Ralat 404 Tersuai dalam Pakej HTTP Standard Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!