qs是一个npm仓库所管理的包,可通过npm install qs命令进行安装(axios 自带qs , // import qs from 'qs')

1、基本用法

  1. qs.parse()将URL解析成对象的形式:

let url = 'user=wdx&pwd=123&appToken=7d22e38e-5717-11e7-907b-a6006ad3dba0'
qs.parse(url)
console.log(qs.parse(url))
// {user:'wdx',pwd:'123',appToken:'7d22e38e-5717-11e7-907b-a6006ad3dba0'}
  1. 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:xxx

urlencoding后是 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()详情相关推荐

  1. qs.parse()、qs.stringify()使用方法

    qs是一个npm仓库所管理的包,可通过npm install qs命令进行安装.  1. qs.parse()将URL解析成对象的形式 const Qs = require('qs'); let ur ...

  2. Vue 之 qs.parse()、qs.stringify()使用方法

    qs是一个npm仓库所管理的包,可通过npm install qs命令进行安装. 1.qs.parse()将URL解析成对象的形式 const Qs = require('qs'); let url ...

  3. qs.stringify和JSON.stringify的使用和区别

    最近在用vue2.x做项目,说实话,项目比较赶不吃力那肯定是假的.这里顺带吐槽一下二线城市东莞,我之前待的城市.深圳很多新技术打得火热,东莞还是有点滞后呐.言归正传,说说 qs.stringify和J ...

  4. qs.parse和qs.stringify

    qs是一个npm仓库所管理的包 安装: npm install qs 主要功能: 解析URL或者将字符串拼接成URL qs.parse() 将URL解析成对象的形式 import qs from 'q ...

  5. qs.stringify

    let obj= {method: "method",id: 1}; var res = qs.stringify(obj); assert.equal(res, 'method= ...

  6. axios 跨域请求详情

    axios 跨域请求详情 写这篇文章的背景是因为之前遇到的,在跨域的情况下通过 axios 发起的 get 请求正常,post 请求会在正式请求发送之前先发送一个 opstions 请求,而后端接口没 ...

  7. 【vue】vue +element 搭建项目,Qs用途

    1.安装 (c)npm install qs -S 2.用途 在 axios中,利用QS包装data数据 3.常见用法: import Qs from 'qs'; Qs.stringify(data) ...

  8. 处理网络请求qs、图片转base64的优劣

    一.引入qs这个库,更好的处理网络请求传参. qs.parse let url = 'http://item.taobao.com/item.htm?a=1&b=2&c=&d= ...

  9. vue+axios+qs序列化 “三步解析”【含demo实例】- 代码篇

    文章目录 qs序列化:是什么?为什么?怎么办?`实例截图参考` 一.`(简单了解)` · `三步解析 ` 序列化是一种用来处理对象流的机制: 对象.文件.数据,有许多不同的格式,很难统一传输和保存 序 ...

  10. qs.js 更好的处理url参数

    qs.parse qs.parse 方法可以把一段格式化的字符串转换为对象格式,比如 let url = 'http://item.taobao.com/item.htm?a=1&b=2&am ...

最新文章

  1. TypeError: ord() expected string of length 1, but int found
  2. 房住不炒,来真的了?
  3. tomcat端口号被占用
  4. 用户进程与内核进程通信netlink实例
  5. 关于JVM和JIT的一点点
  6. 字体小于12px解决办法
  7. c++数字金字塔_“资金管理是投资最大的秘密”(超级干货),一生死记“金字塔加仓减仓法”,最安全稳健的操盘法方式!...
  8. todolist作业效果
  9. GWmodel | 地理加权模型(Ⅱ-1):地理加权主成分分析(GWPCA)
  10. aws rds监控慢sql_如何使用Web控制台和AWS CLI停止AWS RDS SQL Server
  11. JPA映射组合主键时错误:No default constructor for entity
  12. JCI标准认证对我国医院建设有什么意义?
  13. SpringBoot基于易邮邮件服务器实现本地邮件收发
  14. 致远oa系统报价_用友致远OA 系统 一般价钱?(公司60-70台左右的电脑)
  15. 国内自主首创·融合数据采集与运动控制技术--运动数据采集卡
  16. 两台电脑直接使用一根网线传输文件
  17. QQ空间说说一键批量删除软件2.0使用教程
  18. 数据结构_树与二叉树总结
  19. vue3组件库-mycom3-vue 组件文档
  20. mysql 三门课程平均分_平均分

热门文章

  1. Rhino入门教程---渐消面
  2. tuxedo 中间件命令
  3. 解决GLIDE4.0和圆角裁剪CENTERCROP冲突
  4. ubuntuv20启动界面美化_Win10 美化软件(简洁篇)
  5. python获取淘宝服务器时间的代码
  6. oracle循环视频教程,Oracle高清视频课程全45集,赶紧收藏吧!
  7. 单片机代码真值怎么取反c语言,手把手教你学单片机的C语言程序设计(八)运算符与表达式(续).pdf...
  8. adobe reader XI打开大约十几秒就闪退问题解决方法大全
  9. 《MATLAB智能算法30个案例》:第6章 遗传算法工具箱详解及应用
  10. 开发流程与管理--华为硬件开发