Node.js - querystring.stringify() 方法



Node.js querystring.stringify() 方法将通过遍历对象自身的属性,从提供的对象生成 URL 查询字符串。此方法可以序列化对象中传递的值,如 string、number、bigint、Boolean、string[]、number[]、Boolean[] 和 bigint[] 

在序列化时,默认情况下,将假定查询字符串的百分比编码字符使用 UTF-8 编码。必须指定 decodeURIComponent 选项才能解码替代字符编码。

语法

以下是Node.js querystring.stringify()方法的语法 -


 querystring.stringify(obj[, sep[, eq[, options]]])

参数

此方法接受四个参数。下面将对此进行介绍。

  • str − 此参数指定要序列化为 URL 查询字符串的对象。
  • sep − 此参数描述一个子字符串,用于定义查询字符串中的键和值对。默认值为 '&'。
  • eq − 此参数描述一个子字符串,用于定义查询字符串中的键和值。默认值为 '='。
  • options - 这是一个对象,允许修改方法的行为。此对象的以下属性如下所述 -
    • encodeURIComponent − 此函数用于将 URL 不安全的字符转换为查询字符串中的百分比编码。默认情况下,它是 querystring.esacpe()。

返回值

此方法通过遍历对象的“自身属性”,从提供的 obj 返回 URL 查询字符串。

如果我们在 querystring.stringify() 方法中为Node.js指定一个 URL 对象,它将从给定对象返回一个序列化的 URL 查询字符串。

在以下示例中,我们将一个具有属性的对象传递给 querystring.stringify() 方法Node.js。


const { url } = require('node:inspector');
const querystring = require('node:querystring');

var QueryString = {
	 	User: 'john',
	 	role: 'softwareeng',
	 	tech: 'HTML',
	 	permission: 'false'
}

var result = querystring.stringify(QueryString);
console.log(result);

输出

以下是上述程序的输出 -

internal/modules/cjs/loader.js:596
throw err;
^

Error: Cannot find module 'node:inspector'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:594:15)
at Function.Module._load (internal/modules/cjs/loader.js:520:25)
at Module.require (internal/modules/cjs/loader.js:650:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (/home/cg/root/63a03fcfc3513/main.js:1:79)
at Module._compile (internal/modules/cjs/loader.js:702:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)

注意 - 要查看实际结果,请在本地执行上述代码。

执行上述程序后,querystring.stringify() 从给定对象自身的属性返回一个 URL 字符串。

User=john&role=softwareeng&tech=HTML&permission=false

如果我们将任何值传递给 Node.js querystring.stringify() 方法的 sep eq 参数,它将从具有相同分隔的对象返回 URL 查询字符串。

在下面的示例中,我们尝试为 Node.js querystring.stringify() 方法的 eq 参数提供 && 到 sep 和 −。


const { url } = require('node:inspector');
const querystring = require('node:querystring');

var QueryString = {
	 	User: 'john',
	 	role: 'softwareeng',
	 	tech: 'HTML',
	 	permission: 'false'
}

var result = querystring.stringify(QueryString, "&&", "−");
console.log(result);

输出

以下是上述程序的输出 -

internal/modules/cjs/loader.js:596
throw err;
^

Error: Cannot find module 'node:inspector'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:594:15)
at Function.Module._load (internal/modules/cjs/loader.js:520:25)
at Module.require (internal/modules/cjs/loader.js:650:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (/home/cg/root/63a03fcfc3513/main.js:1:79)
at Module._compile (internal/modules/cjs/loader.js:702:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)

注意 - 要查看实际结果,请在本地执行上述代码。

执行上述程序后,querystring.stringify() 返回一个具有相同分隔符的 URL 字符串。

User−john&&role−softwareeng&&tech−HTML&&permission−false

Node.js querystring.stringify() 方法将序列化返回的 URL 查询字符串,即使我们将有限整数值传递给 obj 属性。

在下面的程序中,我们尝试在 obj 中传递一个整数值。


const { url } = require('node:inspector');
const querystring = require('node:querystring');

var QueryString = {
	 	4355: 4565,
	 	role: 'softwareeng',
	 	tech: 'HTML',
	 	permission: 'false'
}

var result = querystring.stringify(QueryString, "&&&", "===");
console.log(result);

输出

以下是上述程序的输出 -

internal/modules/cjs/loader.js:596
throw err;
^

Error: Cannot find module 'node:inspector'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:594:15)
at Function.Module._load (internal/modules/cjs/loader.js:520:25)
at Module.require (internal/modules/cjs/loader.js:650:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (/home/cg/root/63a03fcfc3513/main.js:1:79)
at Module._compile (internal/modules/cjs/loader.js:702:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)

注意 - 要查看实际结果,请在本地执行上述代码。

如果执行上述程序,输出将显示如下。

4355===4565&&&role===softwareeng&&&tech===HTML&&&permission===false