自己在写一个项目,目前遇到的问题是:根据csdn和axios官网的说明,发送简单POST请求的时候,后端可能没办法正确处理数据,浅浅记录一下解决方案。
传递类型对比
即key:value 键值对,不使用JSON封装
类似于get请求,可以很简单的从命令行中看出key:value
我们进行下对比
curl发送对比
1.简单POST
curl http://localhost:8088/api/auth/signin -X POST -d ‘username=admin&password=passwords’
2.简单GET
curl “http://localhost:8088/api/auth/signin?username=admin&password=passwords“
3.JSON型POST
curl -X POST -H “Content-Type: application/json” http://localhost:8088/api/auth/signin -d ‘{“username”:”admin”,”password”:”passwords”}’
接收端对比
1.处理简单POST请求
1 2 3 4 5 6 7 8 9 10 11
| func method(context *gin.Context) { if global.IsCookieAuthValid(context) { context.String(http.StatusOK, "Verified") return } un := context.PostForm("username") pw := context.PostForm("password") }
|
2.处理简单GET请求
1 2 3 4 5 6 7 8 9 10
| func method(context *gin.Context) { if global.IsCookieAuthValid(context) { context.Redirect(302, "/dashboard") return } un := context.DefaultQuery("username", "") pw := context.DefaultQuery("password", "") }
|
可以发现 简单方法获取参数都是一行代码的事,比较简单
而
3.JSON数据处理…
1 2 3 4 5 6 7 8 9 10 11 12 13
| func method(context *gin.Context) { if global.IsCookieAuthValid(context) { context.Redirect(302, "/dashboard") return } json := make(map[string]interface{}) context.BindJSON(&json) un := json["username"] pw := json["password"] }
|
好吧 也还算简单,但是我们想实现简单的数据传递,而根据axios官网的数据传递方法:
1 2 3 4 5 6 7 8
| axios({ method: 'post', url: '/user/12345', data: { firstName: 'Fred', lastName: 'Flintstone' } });
|
这种传递方法会使传递的值后端想进行简单处理是不行的,后端没办法获取到数据,或者直接线程panic了,返回500。
解决
我们需要使用标准的JavaScript方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| login(formName) { console.log(formName) var params = new URLSearchParams(); params.append('username', formName.name); params.append('password', formName.password); axios.post('/api/api/auth/signin', params).then(response => { if (response.status == 200) { goRouter({ name: 'Dashboard' }); } else if (response.status == 401) { ElMessageBox.alert("用户名或密码错误", "登录失败", {}) } }, error => { console.log('E', error.message) }) }
|
问题解决,后端可以按(1.)正常获取数据。
或者转换为标准json,按(3.)处理