🌙 NodeJS之querystring模块学习笔记

🌙 1. querystring(查询字符串)简介及使用
querystring 模块提供用于解析和格式化 URL 查询字符串的实用工具。 它可以使用以下方式访问:
const querystring = require('querystring');
🌙 2.querystring(查询字符串)API
🌙 2.1 querystring.parse(str[, sep[, eq[, options]]]))解析字符串获取URL对象
querystring.decode() 函数是 querystring.parse() 的别名。
strstring (opens new window) 要解析的 URL 查询字符串。sepstring (opens new window) 用于在查询字符串中分隔键值对的子字符串。默认值:'&'。eqstring (opens new window) 用于在查询字符串中分隔键和值的子字符串。默认值:'='。optionsObject (opens new window)decodeURIComponentFunction (opens new window) 当解码查询字符串中的百分比编码字符时使用的函数。默认值:querystring.unescape()。maxKeysnumber (opens new window) 指定要解析的键的最大数量。指定0可移除键的计数限制。默认值:1000。
- 返回:Object
querystring.parse()方法将 URL 查询字符串str解析为键值对的集合。
querystring.parse('foo=bar&abc=xyz&abc=123');
// {
// foo: 'bar',
// abc: ['xyz', '123']
// }
2
3
4
5
源码解读:
function parse(qs, sep, eq, options) {
// obj不是原型地继承自 JavaScript 的 `Object`
const obj = Object.create(null);
if (typeof qs !== 'string' || qs.length === 0) {
return obj;
}
...
}
2
3
4
5
6
7
8
9
querystring.parse() 方法返回的对象不是原型地继承自 JavaScript 的 Object。 这意味着典型的 Object 方法如 obj.toString()、 obj.hasOwnProperty() 等都没有被定义并且不起作用。
🌙 2.2 querystring.stringify(obj[, sep[, eq[, options]]]) 获取URL对象对应的字符串
querystring.encode() 函数是 querystring.stringify() 的别名。
objObject (opens new window) 要序列化为 URL 查询字符串的对象。sepstring (opens new window) 用于在查询字符串中分隔键值对的子字符串。默认值:'&'。eqstring (opens new window) 用于在查询字符串中分隔键和值的子字符串。默认值:'='。optionsencodeURIComponentFunction (opens new window) 当将查询字符串中不安全的 URL 字符转换为百分比编码时使用的函数。默认值:querystring.escape()。
- 返回:string
querystring.stringify()方法通过遍历对象的自身属性从给定的obj生成 URL 查询字符串。
它会序列化传入的 obj 中以下类型的值: (opens new window) | (opens new window) | (opens new window) | (opens new window) | (opens new window) | (opens new window)。 任何其他的输入值都将会被强制转换为空字符串。
querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' });
// 返回 'foo=bar&baz=qux&baz=quux&corge='
querystring.stringify({ foo: 'bar', baz: 'qux' }, ';', ':');
// 返回 'foo:bar;baz:qux'
2
3
4
5
默认情况下,查询字符串中需要进行百分比编码的字符将会被编码为 UTF-8。 如果需要其他的编码,则需要指定其他的 encodeURIComponent 选项:
// 假设 gbkEncodeURIComponent 函数已存在。
querystring.stringify({ w: '中文', foo: 'bar' }, null, null,
{ encodeURIComponent: gbkEncodeURIComponent });
2
3
🌙 2.3 querystring.unescape(str)解码URL 百分比编码字符
strstring (opens new window)- 返回:Object
querystring.unescape('%E6%9F%A5%E8%AF%A2%E5%AD%97%E7%AC%A6%E4%B8%B2')
// '查询字符串'
2
querystring.unescape() 方法在给定的 str 上执行 URL 百分比编码字符的解码。
querystring.unescape() 方法由 querystring.parse() 使用,通常不会被直接地使用。 它的导出主要是为了允许应用程序代码在需要时通过将 querystring.unescape 赋值给替代函数来提供替换的解码实现。
🌙 3.小结
解析字符串获取URL对象
querystring.parse('https://www.baidu.com/s?ie=UTF-8&wd=%E6%9F%A5%E8%AF%A2%E5%AD%97%E7%AC%A6%E4%B8%B2'); // 或者 querystring.decode('https://www.baidu.com/s?ie=UTF-8&wd=%E6%9F%A5%E8%AF%A2%E5%AD%97%E7%AC%A6%E4%B8%B2'); // 返回:{ // 'https://www.baidu.com/s?ie': 'UTF-8', // wd: '查询字符串' // }1
2
3
4
5
6
7
8获取URL对象对应的字符串
querystring.stringify({ foo: 'bar', baz: ['qux', 'quux'], corge: '' }); // 或者 querystring.encode({ foo: 'bar', baz: ['qux', 'quux'], corge: '' }); // 返回 'foo=bar&baz=qux&baz=quux&corge='1
2
3
4解码URL 百分比编码字符
querystring.unescape('%E6%9F%A5%E8%AF%A2%E5%AD%97%E7%AC%A6%E4%B8%B2') // '查询字符串'1
2