Cara Menggabungkan Corak Perisian Tengah Go dengan Pengendali Permintaan Memulang Ralat
Corak perisian tengah Go ialah alat yang berkuasa untuk membalut dan pra-pemprosesan Permintaan HTTP. Walau bagaimanapun, pengendali middleware tradisional tidak boleh mengembalikan ralat, yang boleh merumitkan pengendalian ralat.
Pengendali Permintaan Mengembalikan Ralat
Untuk membolehkan pengendali mengembalikan ralat, kami boleh menentukan adat jenis pengendali:
type errorHandler func(http.ResponseWriter, *http.Request) error
Jenis ini membenarkan pengendali menjana ralat dan bukannya menggunakan panik atau pengelogan secara dalaman.
Ralat Middleware
Untuk mengendalikan ralat ini, kami memerlukan middleware khas yang boleh menerima jenis pengendali yang mengembalikan ralat.
func errorHandler(h errorHandler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { err := h(w, r) if err != nil { // Handle error appropriately (e.g., log, send error response) } }) }
Perisian tengah ini membalut pengendali yang mengembalikan ralat dan menangani sebarang ralat yang dilakukannya menjana.
Penggunaan
Untuk menggunakan rantaian middleware dengan pengendali yang mengembalikan ralat, kami hanya membalut pengendali terakhir dengan middleware ralat dan rantaikannya dengan middleware lain.
// Create a middleware chain. moreMiddleware(myMiddleware(errorHandler(myHandlerReturningError)))
Integrasi Penghala
Untuk kesederhanaan, pertimbangkan untuk mencipta penghala anda sendiri yang menyokong corak ini dan membina rantaian middleware secara automatik.
Contoh Router
https://github.com/fragmenta/mux/blob/master/mux.go
Contoh penghala ini menunjukkan cara membina perisian tengah rantai dan mengendalikan ralat dengan cekap. Ia mempamerkan faedah menggunakan jenis pengendali tersuai untuk pengendalian ralat dan memudahkan penggunaan perisian tengah.
Atas ialah kandungan terperinci Bagaimana Go Middleware Boleh Mengendalikan Ralat yang Dipulangkan oleh Pengendali Permintaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!