Node.js URLsearchParams API
Node.js 是一个开源项目,广泛用于开发动态 Web 应用程序。 Node.js 中的 URLSearchParams API 允许对 URL 查询进行读写操作。
URLSearchParams 类是一个全局对象,与以下四个构造函数之一一起使用。
构造函数:
- new URLSearchParams():无参数构造函数实例化一个新的空 URLSearchParams 对象。
- new URLSearchParams(字符串):接受一个字符串作为参数来实例化一个新的 URLSearchParams 对象。
var params = new URLSearchParams('user=abc&q=xyz'); console.log(params.get('user')); console.log(params.get('q'));
输出:
abc xyz
- new URLSearchParams(obj):接受具有键值对集合的对象来实例化新的 URLSearchParams 对象。 obj 的键值对总是强制转换为字符串。不允许重复键。
const params = new URLSearchParams({ user: 'ana', course: ['math', 'chem', 'phys'] }); console.log(params.toString());
输出:
user=ana&course=math%2Cchem%2Cphys
- new URLSearchParams(iterable):接受具有键值对集合的可迭代对象来实例化新的 URLSearchParams 对象。 Iterable 可以是任何可迭代的对象。由于 URLSearchParams 是可迭代的,因此可迭代对象可以是另一个 URLSearchParams,构造函数将在其中创建提供的 URLSearchParams 的克隆。允许重复键。
// Using a Map object as it is iterable const map = new Map(); map.set('West Bengal', 'Kolkata'); map.set('Karnataka', 'Bengaluru'); params = new URLSearchParams(map); console.log(params.toString());
输出:
West+Bengal=Kolkata&Karnataka=Bengaluru
访问 URL 查询:
- urlSearchParams.get(name):返回与传递的参数匹配的第一个名称-值对的值。如果不存在这样的对,则返回 null。
const myURL = new URL( 'https://example.org/?abc=123&abc=526'); console.log(myURL.searchParams.get('abc'));
输出:
123
- urlSearchParams.getAll(name):返回与传递的参数匹配的名称-值对的所有值。如果不存在这样的对,则返回 null。
const myURL = new URL( 'https://example.org/?abc=123&abc=526'); console.log(myURL.searchParams.getAll('abc'));
输出:
[ '123', '526' ]
- urlSearchParams.has(name):如果传递的参数与名称-值对的任何现有名称匹配,则返回 true,否则返回 false。
const myURL = new URL( 'https://example.org/?abc=123&xyz=526'); console.log(myURL.searchParams.has('abc')); console.log(myURL.searchParams.has('pqr'));
输出:
true false
操作 URL 查询:
- urlSearchParams.set(name, value):将与 name 关联的 URLSearchParams 对象中的值设置为指定值。如果存在多个名称-值对,其名称与 'name' 参数相同,则更改第一个匹配对的唯一值,其余的都被删除。
const params = new URLSearchParams( 'abc=123&xyz=526&abc=258'); console.log(params.toString()); params.set('abc', 'opq'); console.log(params.toString());
输出:
abc=123&xyz=526&abc=258 abc=opq&xyz=526
- urlSearchParams.append(name, value):将新的名称-值对附加到现有的 URLSearchParams 查询。
const params = new URLSearchParams('xyz=123'); params.append('foo', '789'); params.append('xyz', 'zoo'); params.append('foo', 'def'); console.log(params.toString());
输出:
xyz=123&foo=789&xyz=zoo&foo=def
- urlSearchParams.delete(name):删除所有名称与 'name' 参数相同的名称-值对。
const params = new URLSearchParams( 'xyz=123&foo=789&xyz=zoo&foo=def'); console.log(params.toString()); params.delete('foo'); console.log(params.toString());
输出:
xyz=123&foo=789&xyz=zoo&foo=def xyz=123&xyz=zoo
- urlSearchParams.sort():使用稳定的排序算法按名称对现有名称-值对进行就地排序。
const params = new URLSearchParams( 'query=node&type=search&abc=programs'); params.sort(); console.log(params.toString());
输出:
abc=programs&query=node&type=search
- urlSearchParams.toString():将 URL 搜索参数作为字符串返回,必要时使用百分比编码的字符。
const params = new URLSearchParams( 'query=node&type=search&passwd[]=3456'); console.log(params.toString());
输出:
query=node&type=search&passwd%5B%5D=3456
迭代 URL 查询:
- urlSearchParams.entries():返回对 param 对象的条目集的迭代器。
const params = new URLSearchParams( 'query=node&type=search&passwd=3456'); for(var pair of params.entries()) { console.log(pair[0]+ '-->'+ pair[1]); }
输出:
query-->node type-->search passwd-->3456
- urlSearchParams.keys():返回对 param 对象的键集的迭代器。
const params = new URLSearchParams( 'query=node&type=search&passwd=3456'); for(var key of params.keys()) { console.log(key); }
输出:
query type passwd
- urlSearchParams.values():返回参数对象的值集的迭代器。
const params = new URLSearchParams( 'query=node&type=search&passwd=3456'); for(var value of params.values()) { console.log(value); }
输出:
node search 3456
- urlSearchParams.forEach(fn[, arg]): fn 是为查询中的每个名称-值对调用的函数,arg 是调用“fn”时要使用的对象。它遍历查询中的每个名称-值对并调用函数。
const myURL = new URL( 'https://example.com/?a=b&c=d&d=z'); myURL.searchParams.forEach( (value, name, searchParams) => { console.log(name, value, myURL.searchParams === searchParams); });
输出:
a b true c d true d z true
- urlSearchParams[Symbol.iterator]():
const params=new URLSearchParams( 'firstname=john&lastname=beck&gender=male'); for (const [name, value] of params) { console.log(name, value); }
输出:
firstname john lastname beck gender male