Node.js学习笔记(五)#qs查询字符串模块

目录

一、qs模块简介

二、安装和导入

1.安装命令

2.导入

三、常用API

1)qs.parse()

①作用

②用法

③代码示例

④opitions参数表

2)qs.stringify()

①作用

②用法

③代码示例

④opitions参数表


一、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'

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值