ホームページ >バックエンド開発 >Golang >Jin ミドルウェアのエラーを処理する方法: 集中アプローチ?

Jin ミドルウェアのエラーを処理する方法: 集中アプローチ?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-05 04:42:02689ブラウズ

How to Handle Errors in Gin Middleware:  A Centralized Approach?

Gin ミドルウェアでエラーを処理する方法

はじめに

Gin フレームワークを使用して Web アプリケーションを構築する場合、各ルート内でエラーを処理するのが一般的ですハンドラ。これは、特に複数の HTTP エラーを処理する場合に、面倒で冗長なアプローチにつながる可能性があります。 Gin は、エラー処理ミドルウェアの使用を通じて、より洗練されたソリューションを提供します。

ミドルウェアベースのエラー処理

各ルートでエラーを明示的に処理する代わりに、エラーをインターセプトして提供するミドルウェアを作成できます。それらを一元的に処理する方法。ミドルウェア関数には次の手順が含まれている必要があります:

<code class="go">func ErrorHandler(c *gin.Context) {
    // Proceed to the next handler in the chain
    c.Next()

    // Iterate over the errors that occurred during the request handling
    for _, err := range c.Errors {
        // Log the error or perform any other necessary operations
        logger.Error(&quot;whoops&quot;, ...)

        // Send an HTTP response with the appropriate status (or -1 to omit overwriting)
        c.JSON(-1, /* error payload */)
    }
}</code>

ミドルウェアは Use メソッドを使用してルーターに追加されます:

<code class="go">router := gin.New()
router.Use(middleware.ErrorHandler)</code>

エラーを手動で処理する代わりに、ルート ハンドラー内で、適切な HTTP ステータスでリクエストを中止できます。

<code class="go">func (h *Handler) List(c *gin.Context) {
    movies, err := h.service.ListService()

    if err != nil {
        c.AbortWithError(http.StatusInternalServerError, err)
        return
    }

    c.JSON(http.StatusOK, movies)
}</code>

カスタム エラーの処理

ミドルウェアでは、gin.Error タイプの Err フィールドにアクセスして元のエラーを検査できます。 :

<code class="go">for _, err := range c.Errors {
    switch err.Err {
        case ErrNotFound:
            c.JSON(-1, gin.H{&quot;error&quot;: ErrNotFound.Error()})
    }
    // etc...
}</code>

エラーの蓄積とログ

ミドルウェアを使用する利点は、リクエスト処理中に複数のエラーを蓄積できることです。さらに、ユーザー ID、リクエスト URL などのコンテキスト情報をエラーに追加できます。この情報は、より詳細なログ記録やエラー レポートに使用できます。

結論

Gin でミドルウェア ベースのエラー処理を利用することで、エラー処理を一元化して簡素化し、コードの可読性を向上させ、コードの読みやすさを向上させることができます。エラーログ機能。このアプローチはより慣用的であり、カスタム エラーを処理し、リクエストのライフサイクル中に複数のエラーを蓄積する柔軟性を提供します。

以上がJin ミドルウェアのエラーを処理する方法: 集中アプローチ?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。