我尝试创建一个通用的HTTP请求验证器中间件函数,它接受type(可能是reflect.type)作为参数,然后使用包github.com/go-playground/validator/v10
将JSON解组到上述类型的struct中,并验证该结构。
实施例
type LoginRequestBody struct {
Username string `json:"username",validate:"required"`
Password string `json:"password",validate:"required"`
}
type SignupReqBody struct {
Username string `json:"username",validate:"required"`
Password string `json:"password",validate:"required"`
Age int `json:"age",validate:"required"`
}
// sample routers with a common middleware validator function
router.POST("/login", ReqValidate("LoginRequestBody"), LoginController)
router.POST("/signup", ReqValidate("SignupReqBody"), SignupController)
func ReqValidate(<something>) gin.HandlerFunc {
return func (c *gin.Context) {
// unmarshalling JSON into a struct
// common validation logic...
c.Next()
}
}
总的来说,我希望使用Joi包实现与Node.js中相同的验证器灵活性。
2条答案
按热度按时间fnx2tebb1#
我不知道是否有必要使用中间件,但我最近尝试做一些事情,我发现了一个很好的教程,你可以看到here。
您可以使用绑定:
范例:
xt0899hw2#
不要使用逗号来分隔结构标记键值对,使用空格。
您可以使用泛型(类型参数)来替换
<something>
,但您的控制器需要将具体类型作为其参数。例如:
然后是控制器:
然后是路由: