Maison >développement back-end >Golang >Le middleware Gin peut-il gérer toutes les erreurs HTTP sans instructions « if » répétitives ?
Dans Gin, est-il possible de gérer toutes les erreurs HTTP sur chaque route sans écrire des instructions if répétitives pour Erreurs 400, 404, 500, etc. ? L'objectif est de capturer et de gérer les erreurs au sein d'une fonction middleware dédiée.
Oui, vous pouvez utiliser un middleware pour centraliser la gestion des erreurs, éliminant ainsi le besoin d'instructions if répétitives dans les gestionnaires de routes. Voici comment :
Créez une fonction middleware appelée 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>
Enregistrez le middleware ErrorHandler dans la fonction principale :
<code class="go">// ... router := gin.New() router.Use(middleware.ErrorHandler) // ...</code>
Dans les gestionnaires de route, abandonnez simplement la requête avec l'erreur au lieu d'appeler un gestionnaire d'erreur externe :
<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>
Dans le middleware ErrorHandler, inspectez les erreurs capturées dans le contexte :
<code class="go">for _, ginErr := range c.Errors { switch ginErr.Err { case ErrNotFound: c.JSON(-1, gin.H{"error": ErrNotFound.Error()}) // ... } }</code>
Vous pouvez également intégrer la journalisation ou transmettre des arguments personnalisés au middleware comme nécessaire :
<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>
De plus, pensez à ne pas écraser un statut HTTP explicitement défini dans votre gestionnaire d'erreurs en utilisant -1 comme code d'état lors de l'appel de c.JSON.
Vous pouvez utiliser c.Error dans les gestionnaires de routes pour capturer plusieurs erreurs et les gérer collectivement dans le middleware d'erreurs.
L'utilisation d'un middleware pour la gestion des erreurs rationalise votre base de code, permet vous permet de personnaliser et d'étendre le processus de gestion des erreurs et fournit un point de contrôle centralisé pour la gestion des erreurs.
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!