• Node.js Video Tutorials

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'
}

示例

如果 sepeq 参数中提供的值与指定 URL 字符串的分隔符不匹配,则 Node.js querystring.parse() 方法将无法正常工作。如果匹配,它将返回包含键值对的对象。

在下面的程序中,我们将 && 传递给 sep 参数,并将 = 传递给 Node.js querystring.parse() 方法的 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'
}

示例

如果提供的 sepeq 值与指定的 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'
}
nodejs_querystring_module.htm
广告