package controllers import ( "encoding/json" model "github.com/cloudreve/Cloudreve/v3/models" "github.com/cloudreve/Cloudreve/v3/pkg/serializer" "github.com/gin-gonic/gin" "gopkg.in/go-playground/validator.v9" ) // ParamErrorMsg 根据Validator返回的错误信息给出错误提示 func ParamErrorMsg(filed string, tag string) string { // 未通过验证的表单域与中文对应 fieldMap := map[string]string{ "UserName": "邮箱", "Password": "密码", "Path": "路径", "SourceID": "原始资源", "URL": "链接", "Nick": "昵称", } // 未通过的规则与中文对应 tagMap := map[string]string{ "required": "不能为空", "min": "太短", "max": "太长", "email": "格式不正确", } fieldVal, findField := fieldMap[filed] tagVal, findTag := tagMap[tag] if findField && findTag { // 返回拼接出来的错误信息 return fieldVal + tagVal } return "" } // ErrorResponse 返回错误消息 func ErrorResponse(err error) serializer.Response { // 处理 Validator 产生的错误 if ve, ok := err.(validator.ValidationErrors); ok { for _, e := range ve { return serializer.ParamErr( ParamErrorMsg(e.Field(), e.Tag()), err, ) } } if _, ok := err.(*json.UnmarshalTypeError); ok { return serializer.ParamErr("JSON类型不匹配", err) } return serializer.ParamErr("参数错误", err) } // CurrentUser 获取当前用户 func CurrentUser(c *gin.Context) *model.User { if user, _ := c.Get("user"); user != nil { if u, ok := user.(*model.User); ok { return u } } return nil }