98 lines
1.9 KiB
Go
98 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"os"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
type Response struct {
|
|
Ret int `json:"ret"`
|
|
Message string `json:"message"`
|
|
Data interface{} `json:"data"`
|
|
}
|
|
|
|
func unifiedResponseHandler(next echo.HandlerFunc) echo.HandlerFunc {
|
|
return func(c echo.Context) error {
|
|
err := next(c)
|
|
if err != nil {
|
|
// Let the custom HTTP error handler handle the error
|
|
fmt.Fprintf(os.Stderr, "print error: %v", err)
|
|
return err
|
|
}
|
|
|
|
// Handle successful responses
|
|
ret, _ := c.Get("ret").(int)
|
|
msg, _ := c.Get("msg").(string)
|
|
response := c.Get("response")
|
|
return c.JSON(http.StatusOK, Response{
|
|
Ret: ret,
|
|
Message: msg,
|
|
Data: response,
|
|
})
|
|
}
|
|
}
|
|
|
|
// Custom HTTP error handler
|
|
func customHTTPErrorHandler(err error, c echo.Context) {
|
|
var (
|
|
code = http.StatusInternalServerError
|
|
message = "Internal Server Error"
|
|
)
|
|
|
|
if he, ok := err.(*echo.HTTPError); ok {
|
|
code = he.Code
|
|
message = he.Message.(string)
|
|
}
|
|
|
|
c.JSON(http.StatusOK, Response{
|
|
Ret: code,
|
|
Message: message,
|
|
Data: nil,
|
|
})
|
|
}
|
|
|
|
// Helper function to set the response
|
|
func setResponse(c echo.Context, data interface{}) {
|
|
c.Set("ret", 0)
|
|
c.Set("msg", "success")
|
|
c.Set("response", data)
|
|
}
|
|
|
|
// Helper function to set the response
|
|
func setErrResponse(c echo.Context, ret int, msg string) {
|
|
c.Set("ret", ret)
|
|
c.Set("msg", msg)
|
|
c.Set("response", nil)
|
|
}
|
|
|
|
/*
|
|
func unifiedResponseHandler(next echo.HandlerFunc) echo.HandlerFunc {
|
|
return func(c echo.Context) error {
|
|
err := next(c)
|
|
if err != nil {
|
|
c.Error(err)
|
|
}
|
|
|
|
// Retrieve the response
|
|
if he, ok := err.(*echo.HTTPError); ok {
|
|
return c.JSON(http.StatusOK, Response{
|
|
Ret: he.Code,
|
|
Message: he.Message.(string),
|
|
Data: nil,
|
|
})
|
|
}
|
|
|
|
// Handle successful responses
|
|
response := c.Get("response")
|
|
return c.JSON(http.StatusOK, Response{
|
|
Ret: 0,
|
|
Message: "success",
|
|
Data: response,
|
|
})
|
|
}
|
|
}
|
|
*/
|