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"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
var ErrorUser = fiber.NewError(0, "错误")
|
|
||||||
|
|
||||||
func LoginHandle(c *fiber.Ctx) error {
|
func LoginHandle(c *fiber.Ctx) error {
|
||||||
var p = struct {
|
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 {
|
if err != nil {
|
||||||
return err
|
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