qs.stringify()详情
qs是一個npm倉庫所管理的包,可通過npm install qs命令進行安裝(axios 自帶qs , // import qs from 'qs')
1、基本用法
qs.parse()將URL解析成對象的形式:
qs.stringify()將對象 序列化成URL的形式,以&進行拼接
qs.stringify 是把一個參數對象格式化為一個字符串。
let obj= {user:'wdx',pwd:'123',appToken:'7d22e38e-5717-11e7-907b-a6006ad3dba0' } qs.stringify(obj) console.log(qs.stringify(obj)) // 'user=wdx&pwd=123&appToken=7d22e38e-5717-11e7-907b-a6006ad3dba0'2、指定數組編碼格式
那么當我們需要傳遞數組的時候,我們就可以通過下面方式進行處理: 默認情況下,它們給出明確的索引,如下代碼:
qs.stringify({ a: ['b', 'c', 'd'] }); // 'a[0]=b&a[1]=c&a[2]=d'也可以進行重寫這種默認方式為false
qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }); // 'a=b&a=c&a=d'當然,也可以通過arrayFormat 選項進行格式化輸出,如下代碼所示:
// indices(默認) qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' }) // 'a[0]=b&a[1]=c' qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' }) // 'a[]=b&a[]=c' qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' }) // 'a=b&a=c'在這里需要注意的是,JSON中同樣存在stringify方法,但是兩者之間的區別是很明顯的,如下所示:
{"uid":"cs11","pwd":"000000als","username":"cs11","password":"000000als"} uid=cs11&pwd=000000als&username=cs11&password=000000als如上所示,前者是采用JSON.stringify(param)進行處理,后者是采用Qs.stringify(param)進行處理的。
qs庫是用來發送formdata數據的,并且可以改變數據格式,同時他還可以去掉options預請求。
3、處理json格式的參數
在默認情況下,json格式的參數會用 [] 方式編碼,
let json = { a: { b: { c: 'd', e: 'f' } } };qs.stringify(json); //結果 'a[b][c]=d&a[b][e]=f'但是某些服務端框架,并不能很好的處理這種格式,所以需要轉為下面的格式
qs.stringify(json, {allowDots: true}); //結果 'a.b.c=d&a.b.e=f'qs.stringify詳解
默認情況下,axios將JavaScript對象序列化為JSON。 要以application / x-www-form-urlencoded格式發送數據,您可以使用以下選項之一。
const qs = require('qs'); axios.post('/foo', qs.stringify({ 'bar': 123 }));者以另一種方式(ES6)
import qs from 'qs'; const data = { 'bar': 123 }; const options = {method: 'POST',headers: { 'content-type': 'application/x-www-form-urlencoded' },data: qs.stringify(data),url, }; axios(options);詳解: axios默認的content-type是application/json 也就是java后端經常讓你把參數放在body中的那種格式 傳輸的樣式是 requestbody
{name:xxx,age:xxx }如果使用的qs進行序列化 那么content-type就是application/x-www-form-urlencoded 也就是常說的表單提交 傳輸的樣式是 formdata
name:xxx, age:xxxurlencoding后是 name=xxx&age=xxx
所以,實際上是否需要用qs去序列化參數完全取決于后端要怎么接受數據
qs.stringify()與JSON.stringify()區別
qs.stringify、JSON.stringify雖然都是序列化,但他倆卻不是一個東西。
qs是nodejs的一個模塊
JSON.stringify是js自帶的方法,是將json對象轉換為json字符串
var a={"a1": "hello", "a2": "hi"} qs.stringify(a); // 結果是:a1=hello&a2=hi JSON.stringify(a); // 結果是:‘{"a1": "hello", "a2": "hi"}’總結
以上是生活随笔為你收集整理的qs.stringify()详情的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: getchar的利用
- 下一篇: appframework3.0(JQmo