Go Echo没有从Vue获得POST正文 [英] Go Echo not getting POST body from Vue
问题描述
我具有SignUp功能,并尝试获取由Vue框架发送的请求的正文,但是它为空.
I have SignUp function and trying to get the body of a request which sending by Vue framework, but it's empty.
开始
type SignUpForm struct {
Username string
Email string
Password string
}
func SignUp(c echo.Context) error {
form := SignUpForm{
Username: c.FormValue("username"),
Email: c.FormValue("email"),
Password: c.FormValue("password")}
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)
}
}
Vue
sendForm: function() {
var link = '/auth/sign_up'
axios.post(link, {
username: "test",
email: "user@gmail.com",
password: "password"
})
.then(response => {
console.log(e.response)
})
.catch(e => {
console.log(e.response)
})
如果我使用邮递员,则会获得此日志信息
If I use Postman I get this log information
2018/10/27 14:11:48 #####################
2018/10/27 14:11:48 map[email:[user@gmail.com] password:[password] username:[test]]
2018/10/27 14:11:48 map[Vary:[Origin] Access-Control-Allow-Origin:[*]]
2018/10/27 14:11:48 #####################
如果我尝试通过Vue发送,我一无所获
If I try to send by Vue I get nothing
2018/10/27 14:14:55 #####################
2018/10/27 14:14:55 map[]
2018/10/27 14:14:55 map[Vary:[Origin] Access-Control-Allow-Origin:[*]]
2018/10/27 14:14:55 #####################
我完全确定这是go/echo问题,因为我能够在rails应用程序中获取这些参数,因此Vue可以正确发送它们.
I'm totally sure it's go/echo issue because I'm able to get those params in my rails app, so Vue sends them correctly.
<ActionController::Parameters {"username"=>"test", "email"=>"user@gmail.com", "password"=>"password"
有什么想法吗?
推荐答案
如@mkopriva所述,axios
确实以json
的身份发送,但echo
查找x-www-form-urlencoded
.在您的vue
中添加axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
或在每个axios.post
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
在echo中,您可以将请求c.Bind
放入变量中,如下所示.这样,您就可以收到json
或form
(用于测试和vue
的邮递员)
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)
}
}
这篇关于Go Echo没有从Vue获得POST正文的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!