express.raw() 方法
使用 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)的请求体;禁用时,被压缩的请求体会被拒绝 | Boolean | true |
limit | 控制最大请求体大小;数字表示字节数,字符串将传递给 bytes 库解析 | Mixed | “100kb” |
type | 用于确定中间件将解析哪些媒体类型;可以是字符串、字符串数组或函数 | Mixed | “application/octet-stream” |
verify | 如果提供此选项,则会在解析请求体之前调用它,允许你验证请求的有效性 | Function | undefined |
四、注意事项
req.body
的内容是基于用户输入的原始数据,因此在使用前请确保对其进行适当的验证和校验。- 如果请求没有包含有效负载、
Content-Type
不匹配或发生其他错误,则req.body
将是一个空对象{}
。 - 在调用与 Buffer 相关的方法之前,请检查
req.body
是否确实是一个 Buffer 实例,以避免潜在的错误。