63 lines
1.3 KiB
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()
|
|
}
|
|
}
|
|
}
|