generated from pkg/go-template
feat: 参数校验,错误处理demo
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
2facdc9467
commit
372d70969b
|
@ -0,0 +1,27 @@
|
|||
package user
|
||||
|
||||
import "github.com/gofiber/fiber/v2"
|
||||
|
||||
var ErrorUser = fiber.NewError(0, "错误")
|
||||
|
||||
func NewError(msg string) error {
|
||||
return fiber.NewError(fiber.StatusInternalServerError, msg)
|
||||
}
|
||||
|
||||
func NewErrorWithCode(code int, msg string) error {
|
||||
return fiber.NewError(code, msg)
|
||||
}
|
||||
|
||||
func WarpError(err error) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
return fiber.NewError(fiber.StatusInternalServerError, err.Error())
|
||||
}
|
||||
|
||||
func WarpErrorWithCode(code int, err error) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
return fiber.NewError(code, err.Error())
|
||||
}
|
|
@ -8,13 +8,12 @@ import (
|
|||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
var ErrorUser = fiber.NewError(0, "错误")
|
||||
|
||||
func LoginHandle(c *fiber.Ctx) error {
|
||||
var p = struct {
|
||||
Code string `json:"code"`
|
||||
Code string `json:"code" validate:"required"`
|
||||
Email string `json:"email" validate:"email"`
|
||||
}{}
|
||||
err := c.BodyParser(&p)
|
||||
err := Bind(c, &p)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
package user
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/go-playground/locales/zh_Hans_CN"
|
||||
ut "github.com/go-playground/universal-translator"
|
||||
"github.com/go-playground/validator/v10"
|
||||
zh_translations "github.com/go-playground/validator/v10/translations/zh"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"reflect"
|
||||
"strings"
|
||||
)
|
||||
|
||||
var Validate *validator.Validate
|
||||
var trans ut.Translator
|
||||
|
||||
func init() {
|
||||
Validate = validator.New()
|
||||
zh := zh_Hans_CN.New()
|
||||
uni := ut.New(zh, zh)
|
||||
var ok bool
|
||||
trans, ok = uni.GetTranslator("zh_Hans_CN")
|
||||
if !ok {
|
||||
panic(fmt.Errorf("uni.GetTranslator(%s) failed", "zh"))
|
||||
}
|
||||
Validate.RegisterTagNameFunc(func(field reflect.StructField) string {
|
||||
label := field.Tag.Get("json")
|
||||
if label == "" {
|
||||
return field.Name
|
||||
}
|
||||
return label
|
||||
})
|
||||
err := zh_translations.RegisterDefaultTranslations(Validate, trans)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
func Bind(c *fiber.Ctx, out interface{}) error {
|
||||
if reflect.TypeOf(out).Kind() != reflect.Ptr {
|
||||
return NewError("bind must ptr")
|
||||
}
|
||||
|
||||
if err := c.BodyParser(out); err != nil {
|
||||
return WarpError(err)
|
||||
}
|
||||
|
||||
err := Validate.Struct(out)
|
||||
|
||||
if err != nil {
|
||||
if errs, ok := err.(validator.ValidationErrors); ok {
|
||||
errString := make([]string, 0, len(errs))
|
||||
for _, fieldError := range errs.Translate(trans) {
|
||||
errString = append(errString, fieldError)
|
||||
}
|
||||
err = fmt.Errorf("%s", strings.Join(errString, ","))
|
||||
}
|
||||
return WarpErrorWithCode(fiber.StatusBadRequest, err)
|
||||
}
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue