Node.js - querystring.parse() 方法



使用Node.js querystring.parse() 方法,URL 查询字符串将被解析为一个对象,其中包含来自给定 URL 查询的键值和对值。此方法的返回对象不继承 JavaScript 的原型。这意味着 JavaScript 和其他方法的对象方法未定义,并且无法正常工作。

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

语法

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


 querystring.parse(str[, sep[, eq[, options]]])

参数

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

  • str − 此参数指定要解析的URL查询字符串。
  • sep − 此参数描述一个子字符串,用于定义查询字符串中的键和值对。默认值为 '&'。
  • eq − 此参数描述一个子字符串,用于定义查询字符串中的键和值。默认值为 '='。
  • options − 这是一个对象,允许修改方法的行为。此对象的以下属性如下所述 :
    • decodeURIComponent - 这是一个函数,用于解码查询字符串中的百分比编码字符。默认情况下,它是 querystring.unescape()。
    • maxKeys − 此属性指定要解析的最大键数。如果我们指定为 0,则键计数将是无限的。默认情况下,它是 1000。

返回值

此方法会将已解析的 URL 查询字符串返回到键和值对的集合中。

如果我们将 URL 字符串 (str) 传递给 querystring.parse() 方法,它会返回一个对象,该对象具有从提供的 URL 字符串中解析的键和值对。

在以下示例中,我们将 URL 字符串传递给 Node.js querystring.parse() 方法。


const querystring = require('node:querystring');
let urlQuery = "name=varma1&role=writer&tech=nodejs&permission=true";
console.log(querystring.parse(urlQuery));

输出

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

Error: Cannot find module 'node:querystring'
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:83)
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)

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

执行上述程序后,Node.js querystring.parse() 方法返回一个包含键值对的对象。

[Object: null prototype] {
name: 'varma1',
role: 'writer',
tech: 'nodejs',
permission: 'true'
}

如果 sep eq 参数中提供的值与指定 URL 字符串的分隔不匹配,则 Node.js querystring.parse() 方法将无法正常运行。如果匹配,它将返回具有键和值对的对象。

在下面的程序中,我们将 && 传递给 Node.js querystring.parse() 方法的 sep 参数和 = eq 参数。


const querystring = require('node:querystring');
let urlQuery = "name=varma1&&role=writer&&tech=nodejs&&permission=true";
console.log(querystring.parse(urlQuery, "&&", "="));

输出

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

Error: Cannot find module 'node:querystring'
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:83)
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)

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

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

[Object: null prototype] {
name: 'varma1',
role: 'writer',
tech: 'nodejs',
permission: 'true'
}

如果提供的 sep 和 eq 值与指定 URL 字符串的分隔不匹配,则Node.js querystring.parse() 方法将无法按预期运行。如果匹配,它将返回具有键和值对的对象。

在下面的程序中,我们将 & 传递给 sep 参数和 − 传递给 Node.js querystring.parse() 方法的 eq 参数。


const querystring = require('node:querystring');
let urlQuery = "User-john&role−softwareeng&tech−HTML&permission−false";

console.log(querystring.parse(urlQuery, "&", "−"));

输出

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

Error: Cannot find module 'node:querystring'
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:83)
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)

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

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

[Object: null prototype] {
User: 'john',
role: 'softwareeng',
tech: 'HTML',
permission: 'false'
}

Node.js querystring.parse() 方法将返回键和值对,最多为 maxkeys 参数中指定的最大键数。

在下面的示例中,我们正在执行两个方案。在第一种情况下,我们将 1 传递给 maxkeys 参数。在第二种情况下,maxkeys 设置为 2。


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

let QueryString = "User−john&role−softwareeng&tech−HTML&permission−false";

console.log(querystring.parse(QueryString, "&", "−", { maxKeys: 1}));
console.log(querystring.parse(QueryString, "&", "−", { maxKeys: 2}));

输出

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)

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

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

[Object: null prototype] { User: 'john' }
[Object: null prototype] { User: 'john', role: 'softwareeng' }

如果我们为 maxkeys 参数提供 0,则键计数限制将是无限的。

在下面的程序中,我们将 0 传递给 Node.js querystring.parse() 方法的 maxkeys 参数。


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

let QueryString = "User−Kasyap&role−Manager&Exp−eightyrs&permission−true";
console.log(querystring.parse(QueryString, "&", "−", { maxKeys: 0}));

输出

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)

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

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

[Object: null prototype] {
User: 'Kasyap',
role: 'Manager',
Exp: 'eightyrs',
permission: 'true'
}