无法调用 go-gin 中间件

我正在学习并尝试使用 go-gin 框架创建一个简单的 api,


我试图创建一个用于验证的中间件,但是当我调用它时它说validations.signupValidator() is undifined


来自nodejs express的东西似乎有点不同,在此先感谢您的帮助


中间件


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(),

        })

    }

}

称它为


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))

        })

    }

}



小怪兽爱吃肉
浏览 137回答 2
2回答

胡说叔叔

您必须首先导出它,signupValidation因为它在另一个包上。为此,只需更改为大写:SignupValidationpackage 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(),        })    }}第二:用这个签名制作一个 gin 中间件func (ctx *gin.Context)。您可以通过两种方式进行:首先,如果您不想更改注册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))        })    }}或者,更改注册: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

浮云间

将两个文件中的signupValidator重命名为SignupValidator,“s”应为大写。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go