Cro*_*ton 0 javascript http go vue.js axios
我有 SignUp 函数并尝试获取 Vue 框架发送的请求正文,但它是空的。
去
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)
}
}
Run Code Online (Sandbox Code Playgroud)
维埃
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)
})
Run Code Online (Sandbox Code Playgroud)
如果我使用 Postman 我会得到此日志信息
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 #####################
Run Code Online (Sandbox Code Playgroud)
如果我尝试通过 Vue 发送,我什么也得不到
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 #####################
Run Code Online (Sandbox Code Playgroud)
我完全确定这是 go/echo 问题,因为我能够在我的 Rails 应用程序中获取这些参数,因此 Vue 可以正确发送它们。
<ActionController::Parameters {"username"=>"test", "email"=>"user@gmail.com", "password"=>"password"
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
正如 @mkopriva 所说,axios确实发送为,json但echo寻找x-www-form-urlencoded. 在您vue添加axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'或传递每个中的标头axios.post
在 echo 中,您可以将c.Bind请求发送到变量中,如下所示。这样您就可以收到json或form(用于测试的邮递员和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)
}
}
Run Code Online (Sandbox Code Playgroud)