今天,是有委屈的一天;今天,是有小情绪的一天。因此,咱们要对今天进行小结,跟它作一个了断!前端
今天,后端来一个接口,告诉我“要用post请求,parameter形式传参”。over。
初级选手通常听到用post请求,但素用parameter传参必定很懵圈o((⊙﹏⊙))o。那么请先移步看这篇文章,get和post请求其实并没本质区别,他们都是tcp链接,post请求能够将参数放在body中,也能够是parameter形式,both fine!jquery
可是对于post请求来讲,后端所谓的“parameter形式传参”还有如下两个区别:ios
总之,对于post请求这两种形式的parameter传参,后端的处理方式是同样的,他们也称之为“key=value形式传参”。json
另外一种更为常见的,也是前端广泛认为的post请求传参是放在所谓“body”中的,在控制台中能够看到参数形式叫作"request payload",它是json格式的参数。对于这种形式的参数,后台用req.body来处理。axios
接入正题~
一开始我是这么调用的:后端
axios({ method: 'post', url: '/xxx/xxx', data: { a: X, b: XX, c: XXXX, d: XXXXX } })
在这么写完后,打开控制台一看,是上面说的"request payload"参数形式。即后端所言"body传参",它是json格式的对象。不是他们所想要的…… 于是请求失败。-_-||app
而后呢,我修改上述代码,把data改为params,以下:tcp
axios({ method: 'post', url: '/xxx/xxx', params: { a: X, b: XX, c: XXXX, d: XXXXX } })
ok!这种能够成功请求接口,可是参数会尾随在请求路径后面,亦不是理想的传参形式,毕竟咱们不想那么直接地把参数暴露出来。post
肿么办?翻阅资料后,终于发现qs这个包。其实qs.stringify的做用和jquery的$.param()同样,把对象转换为键值对格式。url
import qs from 'qs' axios({ method: 'post', url: '/xxx/xxx', data: qs.stringify({ // >>>关键是这一步,将参数对象转变为key=value格式,这才是后端所想。这种方式,即不直观对外暴露参数,也达到使用“parameter形式” a: X, b: XX, c: XXXX, d: XXXXX }) })
以上~