提交前如何检查有效的更新;如果无效则抛出错误

时间:2020-07-01 18:22:45

标签: go go-gorm fibers

我正在使用Go Fiber和Gorm构建一个宁静的api。我正在编写一个PATCH控制器方法,我想检查传入的PATCH主体并将其与允许更新的列表进行比较。例如如果模型结构是{Username string Password string}并且PATCH方法带有“ Name”,我想抛出一个错误。截至目前,gorm只会忽略它。我还发现了Select()方法,该方法将忽略任何内容,但基于它的字符串是什么,但不会引发错误。

// UpdateUser update a user
func UpdateUser(c *fiber.Ctx) {
    id := c.Params("id")
    db := database.DB

    updatedUser := new(models.User)
    if err := c.BodyParser(updatedUser); err != nil {
        c.Status(500).JSON(fiber.Map{"success": false, "data": err})
        return
    }

    var foundUser models.User
    if err := db.First(&foundUser, id).Error; err != nil {
        c.Status(500).JSON(fiber.Map{"success": false, "data": err})
        return
    }

    if err := db.Model(&foundUser).Select("Username", "Password").Updates(updatedUser).Error; err != nil {
        c.Status(500).JSON(fiber.Map{"success": false, "data": err})
        return
    }

}

因此,我将传入的主体解析为我的模型结构。然后,我在数据库中找到当前用户,并使用新的结构对其进行更新。 .Select(“ Username”,“ Password”)仅允许对这两个键进行更改,但是如果传入请求中的值不在struct中,我想抛出一个错误。

0 个答案:

没有答案