gpt4 book ai didi

go - 无法调用Go-gin中间件

转载 作者:行者123 更新时间:2023-12-01 21:17:32 26 4
gpt4 key购买 nike

我正在学习并尝试使用go-gin框架创建一个简单的api,
我试图创建一个用于验证的中间件,但是当我将其称为validations.signupValidator() is undifined
来自nodejs表达的东西似乎有些不同,在此先感谢您的帮助
中间件

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

最佳答案

您必须先导出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)制作的。
您可以通过2种方式进行操作:
首先,如果您不想更改注册
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

关于go - 无法调用Go-gin中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62705267/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com