我试图创建一个通用的HTTP请求验证中间件函数,该函数接受类型(也许是reflect.Type)作为参数,然后使用
github.com/go-playground/validator/v10
包将JSON解析为所提到类型的结构体并验证其有效性。我尝试通过以下示例代码进行说明...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()
}
}
总的来说,我希望能够达到与Node.js中使用Joi包相同的验证器灵活性。