目录
一、qs模块简介
qs是用于解析和格式化URL查询字符串的外置模块库,node.js虽然内置了querystring模块,但是不能深度解析对象内容,且后续官网也不再使用这一模块,qs模块库很好的解决了这一内容。
二、安装和导入
1.安装命令
npm install qs
2.导入
const qs = require('qs')
三、常用API
1)qs.parse()
①作用:
用来解析查询字符串,转换为object对象
②用法:
qs.parse(string, [options])
参数1:string 必填参数 <string> 需要解析的字符串
参数2:options 可缺省参数 <string> 解析选项
③代码示例:
const qs =require('qs')
let str = "name=conch&age=18&height=180"
let obj = qs.parse(str)
console.log(obj)
//返回 { name: 'conch', age: '18', height: '180' }
④opitions参数表:
参数 | 类型 | 作用 | 用法 |
plainObjects | boolean | 创建nullObject | qs.parse('a[hasOwnProperty]=b', { plainObjects: true }) // 返回 { a: { hasOwnProperty: 'b' } } |
allowPrototypes | boolean | 允许覆盖原型属性 | qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true }) // 返回 { a: { hasOwnProperty: 'b' } } |
depth | number | 嵌套对象默认解析5个子级,设置depth改变为解析子级数量 | qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 }) // 返回 { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } } |
parameterLimit | number | 默认情况下qs最多只能解析1000个参数。可以通过parameterLimit选项来覆盖 | qs.parse('a=b&c=d', { parameterLimit: 1 }) // 返回 { a: 'b' } |
ignoreQueryPrefix | boolean | 可以忽略前面的问号 | qs.parse('?a=b&c=d', { ignoreQueryPrefix: true }) // 返回 { a: 'b', c: 'd' } |
delimiter | string | 可以解析自定义分隔符 | qs.parse('a=b;c=d', { delimiter: ';' }) // 返回 { a: 'b', c: 'd' } qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ }) // 返回 { a: 'b', c: 'd', e: 'f' } |
allowDots | boolean | 可用于启用点符号 | qs.parse('a.b=c', { allowDots: true }) // 返回 { a: { b: 'c' } } |
charset | boolean | 定义编码类型 | qs.parse('a=%A7', { charset: 'iso-8859-1' } // 返回 { a: '§' } |
charsetSentinel | string | 解析省略utf8参数 | qs.parse('utf8=%E2%9C%93&a=%C3%B8', { charset: 'iso-8859-1', charsetSentinel: true }) // 返回 { a: 'ø' } |
allowSparse | boolean | 可以解析稀疏数组 | qs.parse('a[1]=2&a[3]=5', { allowSparse: true }) // 返回 { a: [, '2', , '5'] } |
arrayLimit | number | qs限制数组中指定索引的最大索引为20。任何索引大于20的数组成员都将转换为以索引为键的对象,arrayLimit可以改变这个限制 | qs.parse('a[1]=b', { arrayLimit: 0 }) // 返回 { a: { '1': 'b' } } |
parseArrays | boolean | 完全禁用数组解析 | qs.parse('a[]=b', { parseArrays: false }) // 返回 { a: { '0': 'b' } } |
comma | boolean | 使用逗号连接数组 | qs.parse('a=b,c', { comma: true }) // 返回 { a: ['b', 'c'] } |
decoder() | function | 用于解析以覆盖属性和值的解码 | qs.parse('x=z', { decoder: function (str) { // Passed in values `x`, `z` return // Return decoded string }}) |
2)qs.stringify()
①作用:
对object对象进行解析,转化为查询字符串
②用法:
qs.stringify(object, [options])
参数1:string 必填参数 <string> 需要解析的对象
参数2:options 可缺省参数 <string> 解析选项
③代码示例:
const qs = require('qs')
let obj = { name: 'conch', age: '18', height: '180' }
let str = qs.stringify(obj)
console.log(str)
//返回 name=conch&age=18&height=180
④opitions参数表:
参数 | 类型 | 作用 | 用法 |
encode | boolean | 字符串化时,qs默认为URI编码输出。encode可以禁用以此编码输出 | qs.stringify({ a: { b: 'c' } }, { encode: false }) // 返回 'a[b]=c' |
encodeValuesOnly | boolean | 禁用键的编码 | qs.stringify( { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] }, { encodeValuesOnly: true } ) // 返回 'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h' |
encoder() | function | 自定义编码方法替换编码 | qs.stringify({ a: { b: 'c' } }, { encoder: function (str) { // Passed in values `a`, `b`, `c` return // Return encoded string }}) |
indices | boolean | 当数组被字符串化时,默认情况下它们被赋予显式索引。通过将indices设置为false来覆盖此选项 | qs.stringify({ a: ['b', 'c', 'd'] }, { indices: false }); // 返回 'a=b&a=c&a=d' |
arrayFormat | string | 指定输出数组的格式 | 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' qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' }) // 返回 'a=b,c' |
allowDots | boolean | 用来覆盖该选项以使用点符号 | qs.stringify({ a: { b: { c: 'd', e: 'f' } } }, { allowDots: true }) // 返回 'a.b.c=d&a.b.e=f' |
addQueryPrefix | boolean | 在生成的字符串前增加问号 | qs.stringify({ a: 'b', c: 'd' }, { addQueryPrefix: true }) // 返回 '?a=b&c=d' |
delimiter | string | 生成的字符串自定义分隔符 | qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }) // 返回 'a=b;c=d' |
serializeDate() | function | 覆盖Date对象的序列化 | var date = new Date(7) qs.stringify({ a: date }, { serializeDate: function (d) { return d.getTime(); } }) // 返回 'a=7' |
sort() | function | 改变参数的顺序 | qs.stringify({ a: 'c', z: 'y', b : 'f' }, { sort: function (a, b) { return a.localeCompare(b); }}) // 返回 'a=c&b=f&z=y' |
filter | function array | 限制字符串化输出中将包含哪些键。如果传递一个函数,将为每个键调用该函数以获取替换值。如果传递一个数组,它将用于选择字符串化的属性和数组索引 | qs.stringify({ a: 'b', c: 'd', e: 'f' }, { filter: ['a', 'e'] }); // 返回 'a=b&e=f' |
strictNullHandling | boolean | 区分空值和空字符串 | qs.stringify({ a: null, b: '' }, { strictNullHandling: true }) // 返回 'a&b=' |
skipNulls | boolean | 完全跳过具有空值的渲染键 | qs.stringify({ a: 'b', c: null}, { skipNulls: true }) // 返回 'a=b' |