github.com/gogf/gf@v1.16.9/net/ghttp/ghttp_middleware_handler_response.go (about)

     1  // Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
     2  //
     3  // This Source Code Form is subject to the terms of the MIT License.
     4  // If a copy of the MIT was not distributed with this file,
     5  // You can obtain one at https://github.com/gogf/gf.
     6  
     7  package ghttp
     8  
     9  import (
    10  	"github.com/gogf/gf/errors/gcode"
    11  	"github.com/gogf/gf/errors/gerror"
    12  	"github.com/gogf/gf/internal/intlog"
    13  )
    14  
    15  type DefaultHandlerResponse struct {
    16  	Code    int         `json:"code"`
    17  	Message string      `json:"message"`
    18  	Data    interface{} `json:"data"`
    19  }
    20  
    21  // MiddlewareHandlerResponse is the default middleware handling handler response object and its error.
    22  func MiddlewareHandlerResponse(r *Request) {
    23  	r.Middleware.Next()
    24  	var (
    25  		err         error
    26  		res         interface{}
    27  		internalErr error
    28  	)
    29  	res, err = r.GetHandlerResponse()
    30  	if err != nil {
    31  		code := gerror.Code(err)
    32  		if code == gcode.CodeNil {
    33  			code = gcode.CodeInternalError
    34  		}
    35  		internalErr = r.Response.WriteJson(DefaultHandlerResponse{
    36  			Code:    code.Code(),
    37  			Message: err.Error(),
    38  			Data:    nil,
    39  		})
    40  		if internalErr != nil {
    41  			intlog.Error(r.Context(), internalErr)
    42  		}
    43  		return
    44  	}
    45  	internalErr = r.Response.WriteJson(DefaultHandlerResponse{
    46  		Code:    gcode.CodeOK.Code(),
    47  		Message: "",
    48  		Data:    res,
    49  	})
    50  	if internalErr != nil {
    51  		intlog.Error(r.Context(), internalErr)
    52  	}
    53  }