express.text() 方法
在 Express 应用程序中,我们经常需要处理来自客户端的请求体(payload)。当请求体是文本形式时,我们可以使用 express.text()
中间件来解析它。这个中间件是 Express v4.17.0
及以上版本中的内置功能,基于 body-parser
库。
一、如何使用 express.text()
首先,你需要引入 Express 库,并创建一个 Express 应用实例。然后,你可以简单地调用 express.text()
方法来创建一个新的中间件函数,并将其添加到应用的中间件堆栈中。
const express = require('express');
const app = express();
app.use(express.text());
app.post('/text-parser', (req, res) => {
const textBody = req.body;
console.log(textBody);
// 处理请求体...
});
在这个例子中,任何发送到 /text-parser
路由的 POST 请求都会被解析为文本,并且可以在 req.body
中访问。
二、options 参数详解
express.text()
还接受一个可选的 options
对象,该对象可以配置解析过程的一些细节:
属性 | 描述 | 类型 | 默认值 |
---|---|---|---|
defaultCharset | 指定请求内容字符集的默认值,如果请求中的 Content-Type 头部未指定字符集。 | 字符串 | “utf-8” |
inflate | 启用或禁用处理被压缩(deflated)的请求体;如果禁用,被压缩的请求体会被拒绝。 | 布尔值 | true |
limit | 控制最大请求体大小。如果是数字,则值指定字节数;如果是字符串,则将值传递给 bytes 库进行解析。 | 数字或字符串 | “100kb” |
type | 用于确定中间件将解析哪种媒体类型。此选项可以是字符串、字符串数组或函数。如果不是函数,type 选项直接传递给 type-is 库,这可以是扩展名(如 txt )、MIME 类型(如 text/plain ),或带有通配符的 MIME 类型(如 */* 或 text/* )。如果是函数,type 选项作为 fn(req) 被调用,如果返回一个真值,请求就会被解析。 | 字符串、字符串数组或函数 | “text/plain” |
verify | 如果提供了此选项,则在解析过程中会被调用,格式为 verify(req, res, buf, encoding) ,其中 buf 是请求体原始内容的 Buffer,而 encoding 是请求编码。可以通过抛出错误来终止解析过程。 | 函数 | undefined |
三、注意事项
- 在调用像
req.body.trim()
这样的字符串方法之前,测试req.body
是否是字符串是推荐的做法。 - 由于
req.body
的形状是基于用户输入的,因此所有属性和值都是不可信的,应该在信任之前进行验证。