为了账号安全,请及时绑定邮箱和手机立即绑定

无法调用 go-gin 中间件

无法调用 go-gin 中间件

Go
小怪兽爱吃肉 2022-06-13 16:19:05
我正在学习并尝试使用 go-gin 框架创建一个简单的 api,我试图创建一个用于验证的中间件,但是当我调用它时它说validations.signupValidator() is undifined来自nodejs express的东西似乎有点不同,在此先感谢您的帮助中间件package validationsimport (    "github.com/bihire/ikaze_server_app/entity"    "net/http"    "github.com/gin-gonic/gin"    "gopkg.in/validator.v2")func signupValidator(ctx *gin.Context) {    var user entity.User    // if err := ctx.ShouldBindJSON(&user); err != nil {    //    ctx.JSON(http.StatusBadRequest, gin.H{    //        "error": err.Error(),    //    })    // }    if err := validator.Validate(user); err != nil {        ctx.JSON(http.StatusBadRequest, gin.H{            "error": err.Error(),        })    }}称它为package routesimport (    "github.com/gin-gonic/gin"    "github.com/bihire/ikaze_server_app/service"    "github.com/bihire/ikaze_server_app/controller"    "github.com/bihire/ikaze_server_app/validations")var (    userController controller.UserController = controller.New(UserService))func Routes(route *gin.Engine) {    auth := route.Group("/api/auth")    {                auth.POST("login", gin.Logger(), validations.signupValidator(), func(ctx *gin.Context) {            ctx.JSON(200, userController.Save(ctx))        })    }}
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

您必须首先导出它,signupValidation因为它在另一个包上。为此,只需更改为大写:SignupValidation


package validations


import (

    "github.com/bihire/ikaze_server_app/entity"

    "net/http"

    "github.com/gin-gonic/gin"

    "gopkg.in/validator.v2"

)



func SignupValidator(ctx *gin.Context) {

    var user entity.User

    // if err := ctx.ShouldBindJSON(&user); err != nil {

    //    ctx.JSON(http.StatusBadRequest, gin.H{

    //        "error": err.Error(),

    //    })

    // }


    if err := validator.Validate(user); err != nil {

        ctx.JSON(http.StatusBadRequest, gin.H{

            "error": err.Error(),

        })

    }

}

第二:用这个签名制作一个 gin 中间件func (ctx *gin.Context)。您可以通过两种方式进行:


首先,如果您不想更改注册


package routes


import (

    "github.com/gin-gonic/gin"

    "github.com/bihire/ikaze_server_app/service"

    "github.com/bihire/ikaze_server_app/controller"

    "github.com/bihire/ikaze_server_app/validations"

)


var (

    userController controller.UserController = controller.New(UserService)

)


func Routes(route *gin.Engine) {

    auth := route.Group("/api/auth")

    {

        

        auth.POST("login", gin.Logger(), validations.SignupValidator, func(ctx *gin.Context) {

            ctx.JSON(200, userController.Save(ctx))

        })

    }

}

或者,更改注册:



func SignupValidator(ctx *gin.Context) gin.HandlerFunc {

    return func(c *gin.Context) {

      var user entity.User

      // if err := ctx.ShouldBindJSON(&user); err != nil {

      //    ctx.JSON(http.StatusBadRequest, gin.H{

      //        "error": err.Error(),

      //    })

      // }


      if err := validator.Validate(user); err != nil {

          ctx.JSON(http.StatusBadRequest, gin.H{

              "error": err.Error(),

          })

          return

      }

      c.Next()

   }

}

然后,您可以使用validations.signupValidator()


在此处查看示例:https ://github.com/gin-gonic/gin#custom-middleware


查看完整回答
反对 回复 2022-06-13
?
浮云间

TA贡献1829条经验 获得超4个赞

将两个文件中的signupValidator重命名为SignupValidator,“s”应为大写。



查看完整回答
反对 回复 2022-06-13
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信