express.raw() 方法

预计阅读时间1 分 147 views

使用 express.raw() 解析原始请求体

在 Express 应用开发中,有时我们需要直接访问和处理 HTTP 请求的原始负载(body),而不是解析成特定格式(如 JSON 或表单数据)。从 Express v4.17.0 开始,可以使用 express.raw() 中间件来实现这一需求。

一、什么是 express.raw()

express.raw() 是 Express 框架中的一个内置中间件函数,用于解析传入的请求负载为 Buffer 格式。这意味着无论请求负载是什么内容或格式,express.raw() 都会将其作为一个原始的二进制缓冲区提供给我们。

二、如何使用 express.raw()

要使用 express.raw(),只需在路由处理函数之前引入它即可。这样,任何经过该路由的请求都会被自动解析为原始 Buffer 格式,并存储在 req.body 中。

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

// 引入 express.raw() 中间件
app.use(express.raw({ type: 'application/*' }));

app.post('/api/raw', (req, res) => {
  // 直接访问 req.body 获取原始请求体
  const rawBody = req.body;
  // 处理逻辑...

  res.status(200).send('Raw body received');
});

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

在上面的例子中,我们设置了 type 选项为 'application/*'express.raw() 会解析所有 Content-Type 匹配 application/* 的请求体。当然,你也可以根据需要设置其他 MIME 类型或扩展名。

三、express.raw() 的可选项 options

express.raw() 的可选项 options 的属性如下:

选项描述类型默认值
inflate启用或禁用处理被压缩(deflated)的请求体;禁用时,被压缩的请求体会被拒绝Booleantrue
limit控制最大请求体大小;数字表示字节数,字符串将传递给 bytes 库解析Mixed“100kb”
type用于确定中间件将解析哪些媒体类型;可以是字符串、字符串数组或函数Mixed“application/octet-stream”
verify如果提供此选项,则会在解析请求体之前调用它,允许你验证请求的有效性Functionundefined

四、注意事项

  • req.body 的内容是基于用户输入的原始数据,因此在使用前请确保对其进行适当的验证和校验。
  • 如果请求没有包含有效负载、Content-Type 不匹配或发生其他错误,则 req.body 将是一个空对象 {}
  • 在调用与 Buffer 相关的方法之前,请检查 req.body 是否确实是一个 Buffer 实例,以避免潜在的错误。
分享此文档

express.raw() 方法

或复制链接

本页目录