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>
미들웨어 등록
한 번 미들웨어를 생성했다면 router.Use()를 호출하여 전역적으로 등록할 수 있습니다. 이렇게 하면 경로 핸들러가 호출되기 전에 미들웨어가 호출됩니다.
<code class="go">router := gin.New() router.Use(ErrorHandler)</code>
오류 처리
미들웨어 내에서 모든 오류를 처리할 수 있습니다. 당신이 선호하는 방식. 일반적인 접근 방식 중 하나는 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에서 오류를 처리하기 위해 사용자 정의 미들웨어를 사용하는 것은 코드를 단순화하고 모든 오류가 일관되게 처리되도록 하는 효과적인 방법입니다. 오류 처리를 위한 중앙 위치를 제공함으로써 필요에 따라 오류를 쉽게 기록, 보고 또는 처리할 수 있습니다.
위 내용은 Gin 미들웨어에서 전역 오류 처리를 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!