RockOnGom
RockOnGom

Reputation: 3951

Go gin response middleware

I need to manipulate response data in a middleware function. Assume I have product handlers and customer handlers. Product handler returns a list of products and customer returns a list of customers. In the middleware function, I want to convert these responses into ApiResponse struct.

type ApiResponse struct{
    Data interface{}
    Status ApiStatus{}
}

func someMiddleware(c *gin.Context){
   //before handlers
   c.Next()
   //I need to access response and manipulate it
   // apiResponse := ApiResponse{}
   // apiResponse.Data = returnedData
   // apiResponse.Status = ApiStatus{}

}

I don't want to fill ApiResponse in all handlerFunctions.

Upvotes: 1

Views: 7510

Answers (1)

Seva
Seva

Reputation: 2488

Probably a bit too late, but anyway.

The easiest way is usually to use Get and Set methods of gin.Context to pass data between your middleware and your handlers.

But if you really need to intercept responses, see my answer about logging response in gin. The only difference is what you do with intercepted response, but everything said there about intercepting it stays true.

Upvotes: 2

Related Questions