在 golang gofiber 框架中将 rest api POST 请求从 json 转换为 form-data
convert rest api POST request from json to form-data in golang gofiber framework
我有以下代码适用于 POST 请求的 body 中的 JSON
但我现在想将其转换为在 body 的请求
这是我的
func Signin(c *fiber.Ctx) error {
var data map[string]string
if err := c.BodyParser(&data); err != nil {
return err
}
var user models.User
findUser := database.DB.Where("email = ?", data.email).First(&user)
token, err := middlewares.GenerateJWT(user.Email)
if err != nil {
c.Status(fiber.StatusBadRequest)
return c.JSON(fiber.Map{
"message": "Invalid credentials",
})
}
cookie := fiber.Cookie{
Name: "access_token",
Value: token,
Expires: time.Now().Add(time.Hour * 24),
HTTPOnly: true,
Secure: true,
}
c.Cookie(&cookie)
return c.JSON(fiber.Map{
"access_token": token,
"token_type": "bearer",
})
}
以上对于原始 JSON
body 工作正常,但我想更改为 form-data
body
我尝试了很多方法,包括这个,但都无济于事
func Signin(c *fiber.Ctx) error {
type SigninData struct {
email string `json:"email" xml:"email" form:"email"`
password string `json:"password" xml:"password" form:"password"`
}
data := new(SigninData)
if err := c.BodyParser(&data); err != nil {
return err
}
var user models.User
findUser := database.DB.Where("email = ?", data.email).First(&user)
token, err := middlewares.GenerateJWT(user.Email)
if err != nil {
c.Status(fiber.StatusBadRequest)
return c.JSON(fiber.Map{
"message": "Invalid credentials",
})
}
cookie := fiber.Cookie{
Name: "access_token",
Value: token,
Expires: time.Now().Add(time.Hour * 24),
HTTPOnly: true,
Secure: true,
}
c.Cookie(&cookie)
return c.JSON(fiber.Map{
"access_token": token,
"token_type": "bearer",
})
}
但我收到以下错误
schema: interface must be a pointer to struct
我缺少什么,我需要修复才能接受它 form-data?
方法 BodyParser
需要一个指向结构的指针作为参数,但您的代码试图将一个指向结构指针的指针传递给它。请以这种方式初始化结构:
data := SigninData{}
此外,尝试使 SigninData
结构的字段 public:
type SigninData struct {
Email string `json:"email" xml:"email" form:"email"`
Password string `json:"password" xml:"password" form:"password"`
}
我有以下代码适用于 POST 请求的 body 中的 JSON
但我现在想将其转换为在 body 的请求
这是我的
func Signin(c *fiber.Ctx) error {
var data map[string]string
if err := c.BodyParser(&data); err != nil {
return err
}
var user models.User
findUser := database.DB.Where("email = ?", data.email).First(&user)
token, err := middlewares.GenerateJWT(user.Email)
if err != nil {
c.Status(fiber.StatusBadRequest)
return c.JSON(fiber.Map{
"message": "Invalid credentials",
})
}
cookie := fiber.Cookie{
Name: "access_token",
Value: token,
Expires: time.Now().Add(time.Hour * 24),
HTTPOnly: true,
Secure: true,
}
c.Cookie(&cookie)
return c.JSON(fiber.Map{
"access_token": token,
"token_type": "bearer",
})
}
以上对于原始 JSON
body 工作正常,但我想更改为 form-data
body
我尝试了很多方法,包括这个,但都无济于事
func Signin(c *fiber.Ctx) error {
type SigninData struct {
email string `json:"email" xml:"email" form:"email"`
password string `json:"password" xml:"password" form:"password"`
}
data := new(SigninData)
if err := c.BodyParser(&data); err != nil {
return err
}
var user models.User
findUser := database.DB.Where("email = ?", data.email).First(&user)
token, err := middlewares.GenerateJWT(user.Email)
if err != nil {
c.Status(fiber.StatusBadRequest)
return c.JSON(fiber.Map{
"message": "Invalid credentials",
})
}
cookie := fiber.Cookie{
Name: "access_token",
Value: token,
Expires: time.Now().Add(time.Hour * 24),
HTTPOnly: true,
Secure: true,
}
c.Cookie(&cookie)
return c.JSON(fiber.Map{
"access_token": token,
"token_type": "bearer",
})
}
但我收到以下错误
schema: interface must be a pointer to struct
我缺少什么,我需要修复才能接受它 form-data?
方法 BodyParser
需要一个指向结构的指针作为参数,但您的代码试图将一个指向结构指针的指针传递给它。请以这种方式初始化结构:
data := SigninData{}
此外,尝试使 SigninData
结构的字段 public:
type SigninData struct {
Email string `json:"email" xml:"email" form:"email"`
Password string `json:"password" xml:"password" form:"password"`
}