Meilleure gestion des erreurs avec Gin
Dans cet article, nous explorerons comment implémenter une meilleure gestion des erreurs avec Gin, inspirée par une approche employé dans le cadre Go. Notre objectif est de centraliser la gestion des erreurs, ce qui facilite la gestion et réduit le code en double.
Type d'erreur personnalisé
Similaire au appError personnalisé. tapez dans le framework Go, définissons un type d'erreur personnalisé pour gérer les codes d'erreur et les messages de manière structurée :
<code class="go">type appError struct { Code int `json:"code"` Message string `json:"message"` }</code>
Middleware pour le rapport d'erreurs
Pour centraliser gestion des erreurs, nous pouvons créer un middleware qui gérera les réponses d'erreur :
<code class="go">func JSONAppErrorReporter() gin.HandlerFunc { return jsonAppErrorReporterT(gin.ErrorTypeAny) } func jsonAppErrorReporterT(errType gin.ErrorType) gin.HandlerFunc { return func(c *gin.Context) { c.Next() detectedErrors := c.Errors.ByType(errType) // Process errors and convert them to our custom error type if len(detectedErrors) > 0 { err := detectedErrors[0].Err parsedError := parseAPperror(err) // Put error into response c.IndentedJSON(parsedError.Code, parsedError) c.Abort() } } }</code>
Dans ce middleware, les erreurs détectées sont analysées dans le type appError et renvoyées sous forme de réponses JSON.
Rapport d'erreurs dans le gestionnaire
Pour signaler les erreurs dans les fonctions du gestionnaire, nous utilisons gin.Context.Error():
<code class="go">func fetchSingleHostGroup(c *gin.Context) { hostgroupID := c.Param("id") hostGroupRes, err := getHostGroupResource(hostgroupID) if err != nil { c.Error(err) return } c.JSON(http.StatusOK, *hostGroupRes) }</code>
Avantages
Cette approche offre plusieurs avantages :
Ressources supplémentaires
Pour des informations plus détaillées et des solutions alternatives, reportez-vous aux ressources suivantes :
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!