Gin ミドルウェアでのエラー処理
Gin では、各ルート ハンドラーでエラーを個別に処理するのが一般的です。ただし、これによりコードが反復的になり、潜在的なエラーをすべて検出することが困難になる可能性があります。別のアプローチは、エラーをグローバルに処理するカスタム ミドルウェアを作成することです。
エラー処理ミドルウェアの作成
エラー処理ミドルウェアを作成するには、次の関数を定義できます。 *gin.Context を引数として受け入れます。この関数内で、c.Next() を使用してハンドラー チェーンを実行し、発生するエラーをキャプチャできます。
<code class="go">func ErrorHandler(c *gin.Context) { c.Next() for _, err := range c.Errors { // Handle the error } }</code>
ミドルウェアの登録
1 回ミドルウェアを作成したら、router.Use() を呼び出してグローバルに登録できます。これにより、ルート ハンドラーが呼び出される前にミドルウェアが確実に呼び出されます。
<code class="go">router := gin.New() router.Use(ErrorHandler)</code>
エラーの処理
ミドルウェア内では、任意のエラーを処理できます。あなたのお好みの方法で。一般的なアプローチの 1 つは、c.JSON() を使用して、エラーの詳細を含む JSON 応答を返すことです。
<code class="go">for _, err := range c.Errors { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) }</code>
致命的でないエラーの処理
場合によっては、致命的ではないエラーが発生する場合がありますが、そのエラーはキャプチャしてログに記録する必要がありますが、リクエストは中止されません。これらのエラーの場合、c.Error() を使用してエラーをコンテキストに添付できます。
<code class="go">func (h *Handler) List(c *gin.Context) { movies, err := h.service.ListService() if err != nil { c.Error(err) return } c.JSON(http.StatusOK, movies) }</code>
c.Error() で添付されたエラーには、ErrorHandler ミドルウェアでアクセスできます。
Node.js との比較
Node.js では、エラー オブジェクトをパラメーターとしてミドルウェアに渡すのが一般的です。これは、Gin では直接サポートされていませんが、カスタム エラー タイプを使用し、ミドルウェアの err.Err フィールドで照合することで、同様の効果を実現できます。
結論
Gin でのエラー処理にカスタム ミドルウェアを使用することは、コードを簡素化し、すべてのエラーが一貫して処理されるようにする効果的な方法です。エラー処理の一元的な場所を提供することで、必要に応じてエラーのログ、レポート、処理を簡単に行うことができます。
以上がJin ミドルウェアにグローバル エラー処理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。