前后端传参一般有两种形式:key=value传参形式(即参数形式)body形式ofparameterpassing(passingjsondatatobackend)key=valueformofparameterpassing1.如果使用GET请求,浏览器显示的RequestURL会自动在路径后面加上?a=1&b=2等参数,也就是key=value形式的参数传递,在控制台看到的参数形式是“QueryStringParameters”,后端解析是用querystring.parse处理的。axios请求示例importrequestfrom'axios'...someInterface(params){returnrequest({url:'requestpath',method:'GET',params})},浏览器对GET请求的渲染:2.如果发送一个POST请求,对传入的参数进行如下处理,那么在控制台看到的参数形式为“FormData”,浏览器会自动将RequestHeaders的Content-Type设置为application/x-www-form-urlencoded,这也是一种key=value形式的参数传递,在后端解析时由querystring.parse处理。处理方式一:importrequestfrom'axios'importqsfrom'qs'...someInterface(params){returnrequest({url:'requestpath',method:'POST',data:qs.stringify(params)})},处理方式二:importrequestfrom'axios'importqsfrom'qs'...someInterface(params){returnrequest({url:'requestpath',method:'POST',data:params,transformRequest:[(data)=>{letret=''for(letitindata){ret+=encodeURIComponent(it)+'='+encodeURIComponent(data[it])+'&'}returnret}]})},浏览器呈现:bodyform参数传递如果发送POST、PUT、PATCH等请求,如果content-type为application/json(使用axios发送这些请求时,浏览器RequestHeaders的Content-Type为不显示,默认application/json),在控制台看到的参数形式叫做“Requestpayload”,后端解析使用body-parser处理axiosrequestexampleimportrequestfrom'axios'...someInterface(params){returnrequest({url:'requestpath',method:'POST',data:params})},浏览器渲染:另外,当jquery的ajax请求类型为POST时,contentType会统一处理成:"application/x-www-form-urlencoded;charset=UTF-8",所以使用FormData。这是一种参数传递形式。到目前为止,我还没有在我的测试中看到过这种形式的请求负载。简而言之,方法是使用GET还是POST由后端定义,前端硬编码。这取决于后端如何解析。如果方法不是POST,则必须是body的形式,也可以是key=value的形式。qs.stringify可以转换为key=value形式(即参数对象序列化为URL形式,用&拼接)。
