无法调用 go-gin 中间件
unable to call a go-gin middleware
我正在学习并尝试使用 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))
})
}
}
将两个文件中的 signupValidator 重命名为 SignupValidator,'s' 应该大写。
您必须先导出 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(),
})
}
}
第二:
使用此签名 func (ctx *gin.Context)
制作了一个 gin 中间件。
您可以通过两种方式进行:
首先,如果您不想更改注册
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()
我正在学习并尝试使用 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))
})
}
}
将两个文件中的 signupValidator 重命名为 SignupValidator,'s' 应该大写。
您必须先导出 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(),
})
}
}
第二:
使用此签名 func (ctx *gin.Context)
制作了一个 gin 中间件。
您可以通过两种方式进行:
首先,如果您不想更改注册
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()