Node.js 中的 bodyParser.unlencoded() 函数

2025年4月25日 | 阅读 4 分钟

本文将讨论 Node.js 中的 **bodyParser.urlencoded()** 函数,包括其语法、参数、特性、示例、优点、缺点和用例。

Node.js 中的 bodyParser.urlencoded() 函数是什么?

Node.js 中的 **bodyParser.urlencoded()** 函数是 body-parser 模块提供的中间件,通常与 Express.js 结合使用,用于解析来自 HTTP 请求的传入的 URL 编码数据。此中间件仅处理 Content-Type 标头设置为 application/x-www-form-urlencoded 的请求,这是表单提交的默认编码。它解析请求体并将解析后的数据存储在 req.body 对象中。

语法

它具有以下语法:

参数

  • extended: true 允许将丰富的对象和数组编码到 URL 编码格式中,这是 qs 等库所必需的。
  • extended: false 使用本地 querystring 库进行解析。

特点

Node.js 中 bodyParser.urlencoded() 函数的几个特性如下:

  1. 内容类型匹配:它仅处理包含 Content-Type: application/x-www-form-urlencoded 标头的请求,确保中间件仅应用于相关请求。
  2. UTF-8 编码:此解析器假定传入数据以 UTF-8 编码,以便将内容作为字符串处理。
  3. 自动压缩处理:中间件可以在解析前自动解压压缩数据,例如 gzip、Brotli (br) 和 deflate 编码。在处理来自发送压缩体的 API 的数据时,这非常有用。
  4. 键值对填充:解析后的数据以键值对的形式保存在 req.body 中,其中键来自字段名,值表示用户输入。解析数据的结构取决于 extended 选项。
    • extended: true:它允许解析复杂的对象和数组,由 qs 库处理更复杂的数据结构。
    • extended: false:它将解析的数据限制为简单的键值对或数组,这些使用 querystring 库处理更简单的结构。

示例

让我们通过一个示例来说明 Node.js 中的 bodyParser.urlencoded() 函数。

输出

 
Received data - Name: John, Email: john@example.com   

bodyParser.urlencoded() 的优点

Node.js 中 **bodyParser.urlencoded()** 函数的几个优点如下:

1. 简化表单数据解析

自动解析 HTTP 请求中的 URL 编码数据,使表单提交易于管理。通过使用键值对填充 req.body 对象,可以简化应用程序中检索表单数据的过程。

2. 处理压缩

它支持 gzip、Brotli (br) 和 deflate 编码的自动解压,这对于处理压缩的请求体和提高大型数据传输的效率非常有用。

3. 灵活的数据解析

extended: true 选项允许解析复杂对象和数组,从而灵活处理丰富的数据格式,而 extended: false 确保更简单的数据结构,具体取决于您的需求。

4. URL 编码数据的内置中间件

作为 body-parser 模块中的内置中间件,它无需外部库或手动解析,从而更容易开发处理表单数据的应用程序。

bodyParser.urlencoded() 的缺点

Node.js 中 **bodyParser.urlencoded()** 函数的几个缺点如下:

1. 仅限于 URL 编码数据

它仅处理 application/x-www-form-urlencoded 内容类型的请求。因此,它无法解析 JSON 等其他数据格式,这需要使用 bodyParser.json() 等其他中间件。

2. 无内置验证

bodyParser.urlencoded() 解析表单数据,但不验证或清理数据。这意味着必须采取进一步措施来确保解析后的数据安全并遵循所需格式。

3. 潜在的性能开销

解析过程,特别是对于大型复杂数据,可能会导致性能开销,尤其是在数据未压缩或请求频繁时。

4. 依赖 body-parser 模块

由于此功能由 body-parser 模块提供,开发人员必须将其安装为依赖项。虽然这不是一个大问题,但与使用内置 Node.js 功能(如 HTTP 模块)相比,它确实需要一个额外的步骤。

用例

Node.js 中 **bodyParser.urlencoded()** 函数的几个用例如下:

  1. 处理登录信息:在用户身份验证系统中,登录表单经常将用户名和密码作为 URL 编码数据提交。使用 bodyParser.urlencoded(),服务器可以快速提取和验证请求体中的凭据,然后批准或拒绝访问。
  2. 处理搜索查询:许多搜索应用程序使用 URL 编码参数来发送用户搜索查询。bodyParser.urlencoded() 可用于解析这些查询,从而允许服务器处理它们并返回适当的搜索结果。
  3. 管理多步表单:在多步表单中,当数据分多页收集时,表单数据经常通过 URL 编码从一步传递到下一步。bodyParser.urlencoded() 函数有助于在最终处理或存储之前整合多个步骤中的数据。