[Vuejs]-Go Echo not getting POST body from Vue

5๐Ÿ‘

โœ…

As @mkopriva stated axios does send as json but echo looks for x-www-form-urlencoded. In your vue add axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded' or pass the header in each axios.post

In echo you can c.Bind the request into your variable like below. That way you can receive json or form (postman for testing and vue)

type SignUpForm struct {
    Username string `json:"username" form:"username" query:"username"`
    Email    string `json:"email" form:"email" query:"email"`
    Password string `json:"password" form:"password" query:"password"`
}

func SignUp(c echo.Context) error {

    form := new(SignUpForm)

    if err := c.Bind(form); err != nil {
        return c.JSON(http.StatusBadRequest, err)
    }

    user := models.User{
        Username: form.Username,
        Email:    form.Email,
        Password: models.HashPassword(form.Password),
    }

    log.Printf("#####################")
    values, _ := c.FormParams()
    log.Printf("%v\n", values)
    log.Printf("%v", c.Response().Header())
    log.Printf("#####################")

    err := database.Connection().Create(&user).Error
    if err != nil {
        return c.JSON(http.StatusInternalServerError, err)
    } else {
        return generateJwtToken(c, user)
    }
}
๐Ÿ‘คTrevor V

Leave a comment