Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Go Echo未从Vue获取帖子正文_Javascript_Http_Go_Vue.js_Axios - Fatal编程技术网

Javascript Go Echo未从Vue获取帖子正文

Javascript Go Echo未从Vue获取帖子正文,javascript,http,go,vue.js,axios,Javascript,Http,Go,Vue.js,Axios,我有一个注册函数,试图获取Vue框架发送的请求的主体,但它是空的 开始 type SignUpForm struct { Username string Email string Password string } func SignUp(c echo.Context) error { form := SignUpForm{ Username: c.FormValue("username"), Email: c.For

我有一个注册函数,试图获取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)
    }
}
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)
  })
如果我使用邮递员,我会得到这个日志信息

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发送,我将一无所获

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会正确发送它们

<ActionController::Parameters {"username"=>"test", "email"=>"user@gmail.com", "password"=>"password"
“测试”,“电子邮件”=>“user@gmail.com,“密码”=>“密码”

有什么想法吗?

正如@mkopriva所说的
axios
确实以
json
的形式发送,但是
echo
查找
x-www-form-urlencoded
。在
vue
中添加
axios.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded'
或在每个
axios.post中传递头

在echo中,您可以将请求绑定到变量中,如下所示。通过这种方式,您可以接收
json
表单
(测试和
vue的邮递员


正如@mkopriva所述,
axios
确实作为
json
发送,但
echo
查找
x-www-form-urlencoded
。在
vue
中添加
axios.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded'
或在每个
axios.post中传递头

在echo中,您可以将请求绑定到变量中,如下所示。通过这种方式,您可以接收
json
表单
(测试和
vue的邮递员


您确定没有通过url传递参数吗?试着调试它<代码>fmt.Println(“参数:,c.QueryParams())
@是的,完全正确。我可以在浏览器控制台中看到url
params:map[]
我相信您正在使用axios发送json,但正在尝试使用echo读取URL编码的表单。您是否尝试过
绑定接口
?这就是我通过
axios
vue
form:=new(SignUpForm)发送数据的方式,如果err=c.Bind(form);呃!=nil{return}
@mkopriva您是对的。在
vue
main.js中添加以下
axios.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded'
您确定没有通过url传递参数吗?试着调试它<代码>fmt.Println(“参数:,c.QueryParams())
@是的,完全正确。我可以在浏览器控制台中看到url
params:map[]
我相信您正在使用axios发送json,但正在尝试使用echo读取URL编码的表单。您是否尝试过
绑定接口
?这就是我通过
axios
vue
form:=new(SignUpForm)发送数据的方式,如果err=c.Bind(form);呃!=nil{return}
@mkopriva您是对的。在您的
vue
main.js中添加以下
axios.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded'
Yes,我只需要在结构中定义json参数。非常感谢。是的,我只需要在结构中定义json参数。非常感谢。
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)
    }
}