Browse Source

Fix validator's translator init issue

This issue may cause an unrecoverable panic when concurrent requests to the server with the wrong parameters.
0xJacky 3 years ago
parent
commit
74a48d3462
1 changed files with 11 additions and 6 deletions
  1. 11 6
      server/api/api.go

+ 11 - 6
server/api/api.go

@@ -24,17 +24,22 @@ type ValidError struct {
 	Message string
 	Message string
 }
 }
 
 
+var trans ut.Translator
+
+func init() {
+	uni := ut.New(zh.New())
+	trans, _ = uni.GetTranslator("zh")
+	v, ok := binding.Validator.Engine().(*val.Validate)
+	if ok {
+		_ = zhTranslations.RegisterDefaultTranslations(v, trans)
+	}
+}
+
 func BindAndValid(c *gin.Context, target interface{}) bool {
 func BindAndValid(c *gin.Context, target interface{}) bool {
 	errs := make(map[string]string)
 	errs := make(map[string]string)
 	err := c.ShouldBindJSON(target)
 	err := c.ShouldBindJSON(target)
 	if err != nil {
 	if err != nil {
 		log.Println("raw err", err)
 		log.Println("raw err", err)
-		uni := ut.New(zh.New())
-		trans, _ := uni.GetTranslator("zh")
-		v, ok := binding.Validator.Engine().(*val.Validate)
-		if ok {
-			_ = zhTranslations.RegisterDefaultTranslations(v, trans)
-		}
 
 
 		verrs, ok := err.(val.ValidationErrors)
 		verrs, ok := err.(val.ValidationErrors)