express.urlencoded() 方法

预计阅读时间1 分 145 views

在 Web 开发中,表单提交是最常见的用户交互方式之一。Express.js 框架提供了一个方便的中间件 express.urlencoded(),用于解析 URL 编码的表单数据。

一、什么是 express.urlencoded()

express.urlencoded([options]) 是 Express.js 内置的中间件函数,用于解析包含 URL 编码负载的请求。它基于 body-parser 库,可以将表单数据转换成 JavaScript 对象,方便开发者访问和处理。

二、工作原理

当用户提交表单时,浏览器会将表单数据以 URL 编码的形式发送到服务器。express.urlencoded() 中间件会拦截这些请求,解析编码后的数据,并将解析后的数据添加到 req.body 对象中。

例如,用户提交了一个包含用户名和密码的表单,express.urlencoded() 会将数据解析成如下形式:

req.body = {
  username: 'user123',
  password: 'password123'
};

三、options 配置项

express.urlencoded() 方法支持一个可选的 options 对象,用于配置解析行为:

属性描述类型默认值
extended选择使用 querystring 库(false)或 qs 库(true)解析 URL 编码数据。“扩展”语法允许将丰富的对象和数组编码为 URL 编码格式,从而提供类似 JSON 的 URL 编码体验。Booleantrue
inflate启用或禁用处理压缩数据;禁用时,压缩数据将被拒绝。Booleantrue
limit控制最大请求体大小。如果这是一个数字,则该值指定字节数;如果是字符串,则该值将传递给 bytes 库进行解析。Mixed“100kb”
parameterLimit控制 URL 编码数据中允许的最大参数数量。如果请求包含的参数数量超过此值,则会引发错误。Number1000
type用于确定中间件将解析的媒体类型。此选项可以是字符串、字符串数组或函数。如果不是函数,则 type 选项直接传递给 type-is 库,这可以是扩展名(如 urlencoded)、MIME 类型(如 application/x-www-form-urlencoded)或带有通配符的 MIME 类型(如 */x-www-form-urlencoded)。如果是函数,则 type 选项将作为 fn(req) 调用,如果它返回真值,则解析请求。Mixed“application/x-www-form-urlencoded”
verify此选项(如果提供)将按 verify(req, res, buf, encoding) 调用,其中 buf 是原始请求体的 Buffer,encoding 是请求的编码。可以通过抛出错误来中止解析。Functionundefined

四、示例

以下代码演示了如何在 Express.js 应用中使用 express.urlencoded() 方法:

const express = require('express');
const app = express();

// 使用默认选项解析 urlencoded 数据
app.use(express.urlencoded());

// 使用自定义选项解析 urlencoded 数据
app.use(express.urlencoded({ extended: false, limit: '500kb' }));

app.post('/submit', (req, res) => {
  console.log(req.body); 
  // 处理表单数据
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

五、注意事项

由于 req.body 的形状基于用户控制的输入,因此此对象中的所有属性和值都是不可信的,在信任之前应进行验证。例如,req.body.foo.toString() 可能会以多种方式失败,例如 foo 可能不存在或可能不是字符串,而 toString 可能不是函数,而是字符串或其他用户输入。

分享此文档

express.urlencoded() 方法

或复制链接

本页目录