解决在Vue中使用axios用form表单出现的问题
vue中使用Axios第三方库,采用形式提交,参数格式为multipart/格式数据,请求参数变为对象格式的解决办法。(推荐第二种方法)
提交数据的四种编码方式
一,应用/XWWW的窗体-urlencoded
这应该是最常见的后编码方式,一般的表单提交默认以此方式提交。大部分服务器语言对这种方式都有很好的支持。在PHP中,可以用$_POST[“钥匙”]的方式获取到关键的值,在节点中我们可以使用查询字符串中间件对参数进行分离
app.post("/server",function(req,res){ req.on("data",function(data){ letkey=querystring.parse(decodeURIComponent(data)).key; console.log("querystring:"+key) }); });
2.multipart/格式数据
这也是一种比较常见的后数据格式,我们用表单上传文件时,必须使形式表单的加密类型属性或者AJAX的内容类型参数等于多部分/格式的数据。使用这种编码时格式到发送后台的数据长得像这样子不同字段以开始,接着是内容描述信息,最后是字段具体内容。如果传输的是文件,还要包含文件名和文件类型信息
--boundary
3.application/json
axios默认提交就是使用这种格式。如果使用这种编码方式,那么传递到后台的将是序列化后的json字符串。我们可以将application/json与application/x-www-form-urlencoded的发送数据进行比较
首先应用的英文/JSON:接着是应用程序/x-WWW窗体-urlencoded:这里可以明显看出应用程序/x-WWW窗体-urlencoded上传到后台的数据是以键值形式进行组织的,而应用程序/JSON则直接是个JSON字符串。如果在处理的应用程序/JSON时后台还是采用对付应用程序/x-WWW窗体-urlencoded的方式将会产生问题。例如后台的node.js依然采用之前对付应用程序/x-WWW窗体-urlencoded的方法,那么之后得到的数据的英文这样子的这个时候再只能电子杂志到未定义
querystring.parse(decodeURIComponent(data))
querystring.parse(decodeURIComponent(data)).key
4.text/XML
剩下的一种编码格式是文本/XML,这种格式我没有怎么使用过
解决方法
既然我们知道axiospost方法默认使用application/json格式编码数据,那么解决方案就有两种,一是后台改变接收参数的方法,另一种则是将axiospost方法的编码格式修改为application/x-WWW窗体-urlencoded,这样就不需要后台做什么修改了。
先来看第一种解决方法
VUE组件中,爱可信发送后请求的代码如下
this.$axios({ method:"post", url:"/api/haveUser", data:{ name:this.name, password:this.password } }).then((res)=>{ console.log(res.data); })
控制台此时标题网络里面的信息的英文这样子的后台接收数据需要依赖中间件,我们事先装好,接着在后台代码中引用体解析器这张截图中,作用英文发挥的代码仅仅的英文接下来在路由中使用身体解析器
body-parser
constbodyParser=require("body-parser");
app.post("/api/haveUser",bodyParser.json(),function(req,res){ console.log(req.body); lethaveUser=require("../api/server/user.js"); haveUser(req.body.name,req.body.password,res); });
这时,当前台发送后请求之后,后台控制台就会中出打印这时,通过或者就能拿到对应的值。这种方法比较简单,也不需要前台做过多修改,推荐使用这种方法。req.body
req.body.namereq.body.password
第二种解决方法,具体操作如下
前端
this.$axios({ method:"post", url:"/api/haveUser", headers:{ 'Content-type':'application/x-www-form-urlencoded' }, data:{ name:this.name, password:this.password }, transformRequest:[function(data){ letret='' for(letitindata){ ret+=encodeURIComponent(it)+'='+encodeURIComponent(data[it])+'&' } returnret }], }).then((res)=>{ console.log(res.data); })
其中发挥关键作用的是标头与transformRequest。其中headers的英文设置即将被发送的自定义请求头。transformRequest允许在向服务器发送前,修改请求数据。这样操作之后,后台querystring.parse(decodeURIComponent(data))电子杂志到的就是类似于{name:'w',password:'w'}的对象。
后台代码如下
app.post("/api/haveUser",function(req,res){ lethaveUser=require("../api/server/user.js"); req.on("data",function(data){ letname=querystring.parse(decodeURIComponent(data)).name; letpassword=querystring.parse(decodeURIComponent(data)).password; console.log(name,password) haveUser(name,password,res); }); });
以上这篇解决在Vue中使用axios用form表单出现的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。