Я использую анализатор тела 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
// ...
})
Оно передается как 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),
}
Это почтовая форма, верно? Это кодирует URL-адрес, поэтому: Нет. То же самое, если тело json. Json не имеет возможности передавать массив байтов.
Есть ли способ или рекомендуется передавать его в виде массива байтов?