Comment combiner le modèle de middleware Go avec des gestionnaires de requêtes retournant des erreurs
Le modèle de middleware Go est un outil puissant pour l'encapsulation et le prétraitement Requêtes HTTP. Cependant, les gestionnaires de middleware traditionnels ne peuvent pas renvoyer d'erreurs, ce qui peut compliquer la gestion des erreurs.
Gestionnaires de requêtes de retour d'erreurs
Pour permettre aux gestionnaires de renvoyer des erreurs, nous pouvons définir un type de gestionnaire :
type errorHandler func(http.ResponseWriter, *http.Request) error
Ce type permet aux gestionnaires de générer des erreurs au lieu d'utiliser la panique ou la journalisation en interne.
Middleware d'erreurs
Pour gérer ces erreurs, nous avons besoin d'un middleware spécial capable d'accepter le type de gestionnaire de retour d'erreurs.
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) } }) }
Ce middleware enveloppe le gestionnaire de retour d'erreurs et traite toutes les erreurs qu'il génère.
Utilisation
Pour utiliser une chaîne de middleware avec des gestionnaires de retour d'erreur, nous enveloppons simplement le gestionnaire final avec le middleware d'erreur et l'enchaînons avec un autre middleware.
// Create a middleware chain. moreMiddleware(myMiddleware(errorHandler(myHandlerReturningError)))
Intégration du routeur
Pour plus de simplicité, pensez à créer votre propre routeur qui prend en charge ce modèle et construit automatiquement la chaîne middleware.
Exemple de routeur
https://github.com/fragmenta/mux/blob/master/mux.go
Cet exemple de routeur montre comment créer une chaîne middleware et gérer efficacement les erreurs . Il présente les avantages de l'utilisation d'un type de gestionnaire personnalisé pour la gestion des erreurs et simplifie l'utilisation du middleware.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!