9、ginBlog 后端数据验证、跨域参数配置

安装依赖包

╰─➤  go get -u github.com/go-playground/validator/v10
╰─➤  go get -u github.com/go-playground/locales/zh_Hans_CN
╰─➤  go get -u github.com/go-playground/universal-translator
╰─➤  go get -u github.com/gin-contrib/cors

在 utils目录下创建validator 中间件

╰─➤  cat utils/validator/validator.go 
package validator

import (
        "fmt"
        "ginBlog/utils/errmsg"
        "github.com/go-playground/locales/zh_Hans_CN"
        unTrans "github.com/go-playground/universal-translator"
        "github.com/go-playground/validator/v10"
        zhTrans "github.com/go-playground/validator/v10/translations/zh"
        "reflect"
)

func Validate(data interface{}) (string, int)  {
        // 实例化
        validate := validator.New()
        //      转换成中文提示
        uni := unTrans.New(zh_Hans_CN.New())
        //      引进翻译方法
        trans,_ := uni.GetTranslator("zh_Hans_CN")

        err := zhTrans.RegisterDefaultTranslations(validate, trans)
        if err != nil {
                fmt.Println("err: ", err)
        }

        // 提示字段英文转换中文
        validate.RegisterTagNameFunc(func(field reflect.StructField) string {
                label := field.Tag.Get("label")
                return label
        })

        // 验证传值
        err = validate.Struct(data)
        if err != nil {
                for _, v := range err.(validator.ValidationErrors) {
                        return v.Translate(trans), errmsg.ERROR
                }
        }
        return "", errmsg.SUCCESS
}

在 middleware 目录想创建跨域参数的配置cors

╰─➤  cat middleware/cors.go 
package middleware

import (
        "github.com/gin-contrib/cors"
        "github.com/gin-gonic/gin"
        "time"
)

func Cors() gin.HandlerFunc {
        return cors.New(
                cors.Config{
                        AllowAllOrigins: true,
                        AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
                        AllowHeaders: []string{"*"},
                        ExposeHeaders: []string{"Content-Length", "Authorization", "Content-Type"},
                        MaxAge: 12 * time.Hour,
                },
        )
}

在 router.go 文件中注入跨域引用

gin.SetMode(utils.AppMode)
	r := gin.New()
	// 引入日志
	r.Use(middleware.Log())
	// 处理引入的中间件
	r.Use(gin.Recovery())
	// 引入跨域处理
	r.Use(middleware.Cors())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值