0

我正在使用 Go Fiber 的正文解析器来解析请求正文。我有以下结构

type SignInCredentials struct {
    Email    string
    Password []byte
}

我有一个密码作为字节切片。当我尝试像这样解析身体时

func SignUp(db *database.Database) fiber.Handler {
    return func(c *fiber.Ctx) error {

        cred := new(model.SignUpCredentials)

        if err := c.BodyParser(cred); err != nil {
            return SendParsingError(c)
        }

我收到架构错误

schema: error converting value for index 0 of \"Password\

因为表单数据密码的类型与 []byte 类型不匹配。我查看了他们的示例,并注意到在文档中他们使用字符串来存储密码。但我准备将它存储为一个字节片。我怎样才能做到这一点?

// Field names should start with an uppercase letter
type Person struct {
    Name string `json:"name" xml:"name" form:"name"`
    Pass string `json:"pass" xml:"pass" form:"pass"`
}

app.Post("/", func(c *fiber.Ctx) error {
        p := new(Person)

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

        log.Println(p.Name) // john
        log.Println(p.Pass) // doe

        // ...
})
4

1 回答 1

1

它作为 传输string,而不是[]byte。您需要先将其解析为字符串,然后您可以将其转换为您想要的结构:

func SignUp(db *database.Database) fiber.Handler {
    return func(c *fiber.Ctx) error {
        // an anonymous struct to parse the body
        body := struct{
            Email string
            Password string
        }{}
        if err := c.BodyParser(body); err != nil {
            return SendParsingError(c)
        }

        cred := SignInCredentials{
            Email:    body.Email,
            Password: []byte(body.Password),
        }
于 2020-12-10T13:02:49.990 回答