亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法調用 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 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號