【问题标题】:how do i enforce the proper data types on gofiber golang from POST data from frontend?我如何在来自前端的 go Fiber golang 表单 POST 数据中强制执行正确的数据类型?
【发布时间】:2022-01-17 08:02:58
【问题描述】:

我从反应前端收到以下 POST 请求 json 数据

{
    "field_one": "first",
    "field_two": "second",
    "field_three": "3.00"
}

但我希望 golang 在处理请求之前将其转换为这个

{
    "field_one": "first",
    "field_two": "second",
    "field_three": 3.00
}

我想将 field_three 从字符串转换为 float64,但我无法让 golang 接受字符串并处理正确的数据类型

这是我处理 POST 请求数据的 golang 函数

func PostCreate(c *fiber.Ctx) error {
    
    type PostCreateData struct {
        fieldOne       string  `json:"field_one" form:"field_one" validate:"required"`
        fieldTwo       string  `json:"field_two" form:"field_two" validate:"required"`
        fieldThree     float64 `json:"field_three" form:"field_three" validate:"required"`
    }

    data := PostCreateCreateData{}

    if err := c.BodyParser(&data); err != nil {
        return err
    }

    validate := validator.New()
        if err := validate.Struct(data); err != nil {
        return err
    }

    postCreate := models.PostCreate{
        fieldOne:         data.fieldOne,
        fieldTwo:         data.fieldTwo,
        fieldThree:       float64(data.fieldThree),
    }

    database.DB.Create(&postCreate)
    return c.JSON(postCreate)
}

当前请求没有得到处理,因为 field_three 的错误数据类型应该是 float64 但前端将所有内容都作为字符串发送

我在这里缺少哪些步骤?

【问题讨论】:

  • this 有帮助吗?
  • ab 中的内容是什么?在err := json.Unmarshal([]byte(a), b) 我想b 将是&dataa 中会是什么以及我放置代码行的位置是什么?

标签: reactjs go types go-fiber


【解决方案1】:

通过将函数更新为此修复

func PostCreate(c *fiber.Ctx) error {
    
    type PostCreateData struct {
        fieldOne       string  `json:"field_one" form:"field_one" validate:"required"`
        fieldTwo       string  `json:"field_two" form:"field_two" validate:"required"`
        fieldThree     float64 `json:"field_three,string" form:"field_three" validate:"required"`
    }

    data := PostCreateCreateData{}

    if err := c.BodyParser(&data); err != nil {
        return err
    }

    validate := validator.New()
        if err := validate.Struct(data); err != nil {
        return err
    }

    postCreate := models.PostCreate{
        fieldOne:         data.fieldOne,
        fieldTwo:         data.fieldTwo,
        fieldThree:       float64(data.fieldThree),
    }

    database.DB.Create(&postCreate)
    return c.JSON(postCreate)
}

所以更新了结构体以期望在正文中出现字符串

fieldThree     float64 `json:"field_three,string" form:"field_three" validate:"required"`

并且像魅力一样工作!!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2011-04-24
    • 2023-03-08
    • 2022-01-26
    • 2022-01-24
    • 2020-05-12
    • 2023-04-01
    相关资源
    最近更新 更多