我在post请求中获得的数据是表单数据,我想在将数据发送到数据库查询之前验证该数据。我怎么能那样做。
我可以看到,我可以通过绑定将验证器与json类型一起使用。
这是我的游戏结构:
type Game struct {
Id string `json:"Id"`
Name string `json:"Name" validate:"required"`
Rating float32 `json:"Rating" `
TimesPlayed int `json:"TimesPlayed" validate:"required, number"`
ImagePath string `json:"ImagePath" validate:"required, file"`
Description string `json:"Description"`
Developer string `json:"Developer" validate:"required, min=5, max=20"`
CreationDate time.Time `json:"CreationDate"`
Version string `json:"Version"`
Tags []string `json:"Tags"`
Downloads int64 `json:"Downloads" validate:"number"` // firestore doesn't support uint64
DownloadLink string `json:"DownloadLink" validate:"required, uri"`
}
我有formvalue,我想利用验证器来验证我的formvalue。
有关于我该怎么做的指南吗?
现在我正在做这个没有验证
func newGameHandler(c echo.Context) error {
// create new game model
// TODO need a security layer in between the form and our new game struct
newGame := models.Game{
Name: c.FormValue(NAME),
Developer: c.FormValue(DEVELOPER),
CreationDate: time.Now(),
Version: c.FormValue(VERSION),
}
// Add new game to database
_db, getDbErr := db.NewDatabaseFromEnv()
_, err := _db.AddGame(newGame)
// error handling
if getDbErr != nil {
return c.JSON(http.StatusInternalServerError, "Database connection error")
}
if err != nil {
return c.JSON(http.StatusInternalServerError, "Database add game error")
}
// TODO return successful game add
return c.JSON(http.StatusOK, "New game handler")
}
如何对此添加验证?
这取决于您使用的框架,但我们有用于通用目的的Go验证器,也基于您正在使用的框架。您也可以使用他们的验证器,如echo验证器或gin验证器。
您也可以向它们添加自定义验证功能。