LicenseManger/internal/middleware/error.go

63 lines
1.3 KiB
Go

package middleware
import (
"licserver/internal/utils"
"net/http"
"github.com/gin-gonic/gin"
)
func ErrorHandler() gin.HandlerFunc {
return func(c *gin.Context) {
c.Next()
// 只处理第一个错误
if len(c.Errors) > 0 {
err := c.Errors[0].Err
var statusCode int
var response utils.ErrorResponse
switch err {
case utils.ErrUnauthorized:
statusCode = http.StatusUnauthorized
response = utils.ErrorResponse{
Code: 401,
Message: "未授权的访问",
Detail: err.Error(),
}
case utils.ErrForbidden:
statusCode = http.StatusForbidden
response = utils.ErrorResponse{
Code: 403,
Message: "禁止访问",
Detail: err.Error(),
}
case utils.ErrNotFound:
statusCode = http.StatusNotFound
response = utils.ErrorResponse{
Code: 404,
Message: "资源不存在",
Detail: err.Error(),
}
case utils.ErrInvalidInput:
statusCode = http.StatusBadRequest
response = utils.ErrorResponse{
Code: 400,
Message: "无效的输入",
Detail: err.Error(),
}
default:
statusCode = http.StatusInternalServerError
response = utils.ErrorResponse{
Code: 500,
Message: "服务器内部错误",
Detail: err.Error(),
}
}
c.JSON(statusCode, response)
c.Abort()
}
}
}